public class Abc<T>{
public Abc(Class<T> type) {
}
}
我调用的时候
Abc<HashSet<String>> Abc = new Abc<HashSet<String>>(HashSet<String>.class);
通不过,报错
Abc<HashSet<String>> Abc = new Abc<HashSet<String>>(HashSet.class);
还是报错
Abc<HashSet> Abc = new Abc<HashSet>(HashSet.class);
这样终于可以了,但是没有指定 HashSet 容器内部的类型,IDE 报警,而且我也觉得这好像不是正统的 java 写法,正统的 java 写法都应该指定容器里的类型的。
我查了不少资料,因为类型擦除的原因,看起来最后一种才是对的,但是为啥最后一种那么别扭呢。没给容器指定元素类型这个报警问题是只能这样,还是有更好的办法?
一般来说不会用传入T.class的形式来读取泛型信息。
在泛型类内部,可以在运行时通过反射获取T的具体类型信息,手机答题不方便贴链接了,你可以搜索‘’ParameterizedType”关键字来获取这方面的信息。