这样的泛型定义到底如何调用才是对的呢?

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 写法都应该指定容器里的类型的。

我查了不少资料,因为类型擦除的原因,看起来最后一种才是对的,但是为啥最后一种那么别扭呢。没给容器指定元素类型这个报警问题是只能这样,还是有更好的办法?

阅读 2.3k
3 个回答

一般来说不会用传入T.class的形式来读取泛型信息。

在泛型类内部,可以在运行时通过反射获取T的具体类型信息,手机答题不方便贴链接了,你可以搜索‘’ParameterizedType”关键字来获取这方面的信息。

没有 HashSet<String>.class 只有HashSet.class

因为java的泛型是1.5才加的,而且java有非对象数据类型,因此泛型实现的比较别扭。
你这种情况只能用@SuppressWarnings压制警告了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题