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 ),这会阻止您使用参数化类来实现上述目的。

但是, 要做的是从另一个成员(也恰好是静态的)引用参数化方法的类型参数,这也是无法访问的。