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

时间:2013-01-24 20:41:09

标签: 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> theSet = getObjectAs(map, ***Set<String>.class***);
    }

    private static <T> T getObjectAs(Object object, Class<T> cls){
        return cls.cast(object);
    }
}

但是这不起作用,我无法使用.class(参见粗体)从该Set中获取类对象,因为它是参数化的。

我想让该方法返回一个Set,它的类型可能会有所不同(它不会总是一组字符串)但我知道并且我可以作为参数提供。

还有其他办法可以做这样的事吗?

1 个答案:

答案 0 :(得分:1)

你可能做到这一点的唯一方法是接受你需要做不安全的演员表。没有Set<String>.class之类的东西,因为它在各方面都与Set.class完全相同。

您可以做的唯一其他事情是使用某个库中的“通用类”类型之一,例如Guava's TypeToken,但这不会让您解决对不安全转换的需求 - - 它只允许你用泛型指定它。番石榴TypeToInstanceMap的作用相似。