我是泛型的新手。Java泛型:声明泛型类型的映射值
有一个Map
像
private static Map<String, Object> map;
和像
public <T> T getObject(final Class<T> myClass) {
return (T)map.get(myClass);
}
的方法如何改变,以地图的声明从方法返回时没有做演员?
我是泛型的新手。Java泛型:声明泛型类型的映射值
有一个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()需要一个String,那么传递一个Class没有任何意义。
编辑:我没有注意到地图是静态的。如果您可以将其更改为非静态而不破坏程序的其他部分,则可以使用此功能。如果你不能,那么你无法避免演员阵容。
无法对非静态类型T做出静态引用T –
@DisplayName OK,map是静态的,我错过了。然后,如果您无法将地图从静态更改为非静态,则这不起作用。 – Pablo
如果你愿意放弃你的地图的static
修改,比你能做到像这样:
public class MyClass<T> {
private Map<String, T> map;
public T getObject(final Class<T> myClass) {
return map.get(myClass);
}
}
否则:
这是一个编译时错误指一个通用的 类C的一个类型参数中的任何位置:
- 的ç
01的静态成员的声明
(摘自JLS),其阻止您使用参数化类实现上述。
什么你试图做,但是,从另一个成员(这恰好也是静态的),这也可达指一个参数方法的类型参数。
你有没有机会宣布地图像'Map>'? –
nobeh
@nobeh IDE说:T无法解析为类型 –
我认为@Pablo对此有一个很好的答案。 – nobeh