Javagenerics:声明generics类型的映射值
我是仿制药的新手。
像Map
一样
private static Map map;
和像这样的方法
public T getObject(final Class myClass) { return (T)map.get(myClass); }
如何更改map声明,以便在从方法返回时不必进行强制转换?
您需要创建generics类,而不是通用方法:
public class MyClass { private Map map; public T getObject(final String key) { return map.get(key); } }
另外,我将参数从Class更改为String。 如果map.get()需要一个String,那么传递一个Class是没有意义的。
编辑:我没注意到地图是静态的。 如果您可以将其更改为非静态而不破坏程序的其他部分,则可以使用。 如果你不能,那么你无法避免演员表演。
您无法避免强制转换操作,因为get()方法返回Object,请参阅此处以获取更多信息
如果您愿意删除地图的static
修改器,那么您可以这样做:
public class MyClass { private Map map; public T getObject(final Class myClass) { return map.get(myClass); } }
除此以外:
在以下任何地方引用generics类C的类型参数是编译时错误:
- C的静态成员的声明
(摘自JLS ),这会阻止您使用参数化类来实现上述目的。
但是, 您要做的是从另一个成员(也恰好是静态的)引用参数化方法的类型参数,这也是无法访问的。