我想做类似以下的事情:
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,它的类型可能会有所不同(它不会总是一组字符串)但我知道并且我可以作为参数提供。
还有其他办法可以做这样的事吗?
答案 0 :(得分:1)
你可能做到这一点的唯一方法是接受你需要做不安全的演员表。没有Set<String>.class
之类的东西,因为它在各方面都与Set.class
完全相同。
您可以做的唯一其他事情是使用某个库中的“通用类”类型之一,例如Guava's TypeToken
,但这不会让您解决对不安全转换的需求 - - 它只允许你用泛型指定它。番石榴TypeToInstanceMap
的作用相似。