繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM