Java 在不使用实例的情况下获取泛型集合的类

Java 在不使用实例的情况下获取泛型集合的类,java,reflection,parameterized,Java,Reflection,Parameterized,我想做如下事情: 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&

我想做如下事情:

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);
    }
}
公共类测试{
公共静态void main(字符串[]args){
Map Map=newhashmap();
put(“key1”,newhashset());
Set theSet=getObjectAs(映射,***Set.class***);
}
私有静态T getObjectAs(对象对象,类cls){
返回cls.cast(对象);
}
}
但这不起作用,我无法使用.class(见粗体)将class对象从该集中取出,因为它是参数化的

我想让这个方法返回一个集合,这个集合的类型可能会有所不同(它并不总是一组字符串),但我知道并且可以作为参数给出


还有其他方法可以这样做吗?

唯一可以这样做的方法是接受需要进行不安全的强制转换。没有所谓的
Set.class
,因为它在各个方面都完全等同于
Set.class


您唯一可以做的另一件事是使用某个库中的某个“泛型类”类型,例如,但这不会让您避开不安全强制转换的需要--它只允许您使用泛型指定它。番石榴的效果也很相似。

用例到底是什么?您正在创建已键入的“地图”。您甚至不需要“getObjectAs”方法。您需要做的就是:SettheSet=map.get(“key1”);将映射强制转换到集合也不起作用-getObjectAs(map,set.class);