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