Java泛型:声明泛型类型的映射值

Dis*_*ame 4 java generics casting

我是仿制药的新手.

有一个Map喜欢

private static Map<String, Object> map;
Run Code Online (Sandbox Code Playgroud)

和像这样的方法

public <T> T getObject(final Class<T> myClass) {
    return (T)map.get(myClass);
}
Run Code Online (Sandbox Code Playgroud)

如何更改地图声明,以便在从方法返回时不必进行强制转换?

Pab*_*blo 8

您需要创建泛型类,而不是通用方法:

public class MyClass<T> {
   private Map<String, T> map;

   public T getObject(final String key) {
    return map.get(key);
   }
}
Run Code Online (Sandbox Code Playgroud)

另外,我将参数从Class更改为String.如果map.get()需要一个String,那么传递一个Class是没有意义的.

编辑:我没注意到地图是静态的.如果您可以将其更改为非静态而不破坏程序的其他部分,则可以使用.如果你不能,那你就无法避免演员阵容.