我是仿制药的新手。
拥有Map
之类的
private static Map<String, Object> map;
和像
这样的方法public <T> T getObject(final Class<T> myClass) {
return (T)map.get(myClass);
}
如何更改地图声明,以便在从方法返回时不必进行强制转换?
答案 0 :(得分:8)
您需要创建泛型类,而不是通用方法:
public class MyClass<T> {
private Map<String, T> map;
public T getObject(final String key) {
return map.get(key);
}
}
另外,我将参数从Class更改为String。如果map.get()需要一个String,那么传递一个Class是没有意义的。
编辑:我没注意到地图是静态的。如果您可以将其更改为非静态而不破坏程序的其他部分,则可以使用。如果你做不到,那么就无法避免演员。
答案 1 :(得分:0)
由于get()方法返回Object,因此无法避免强制转换操作 有关详细信息,请参阅here
答案 2 :(得分:0)
如果您愿意放弃地图的static
修饰符,那么您可以这样做:
public class MyClass<T> {
private Map<String, T> map;
public T getObject(final Class<T> myClass) {
return map.get(myClass);
}
}
否则:
引用泛型的类型参数是编译时错误 C级中的C级:
- C
的静态成员的声明
(摘自JLS),这会阻止您使用参数化类来实现上述目标。
尝试做的是指从另一个成员(也恰好是静态的)引用参数化的方法的类型参数,也无法到达。