![](/img/trans.png)
[英]How do you get an instance of java.lang.Class for a generic collection like Collection<SomeObject>?
[英]Get the class for a generic collection without using an instance
我想做以下事情:
public class Test {
public static void main(String[] args) {
Map<String, Set<String>> map = new HashMap<String, Set<String>>();
map.put("key1", new HashSet<String>());
Set<String> theSet = getObjectAs(map, ***Set<String>.class***);
}
private static <T> T getObjectAs(Object object, Class<T> cls){
return cls.cast(object);
}
}
但这是行不通的,我无法使用.class(参见粗体)从该Set中获取类对象,因为它已参数化。
我想让该方法返回一个Set,该Set的类型可能有所不同(它不一定总是字符串集),但是我知道并且可以作为参数给出。
还有另一种方法可以做这样的事情吗?
您唯一可能执行此操作的方法是接受您需要执行不安全的强制转换。 没有诸如Set<String>.class
这样的东西,因为它在各个方面都与Set.class
完全相等。
您可能唯一能做的就是在某个地方使用某种类型的库中的“泛型类”类型,例如Guava的TypeToken
,但这不会让您摆脱对不安全类型转换的需求-它只会让您用泛型指定它。 番石榴的TypeToInstanceMap
工作方式与此类似。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.