Java泛型推断类型

Java泛型推断类型,java,generics,Java,Generics,当我使用以下代码时,我的IDE会生成警告: aMethod(List.class); “类型安全:类型列表的表达式需要未经检查的转换才能符合…” 遗憾的是,当我试图让IDE修复它时,它不起作用。推断泛型类型的正确语法是什么?如需任何帮助,请提前通知Thx 编辑: 方法签字: public static <T> T aMethod(Class<T> clazz) publicstatict方法(类clazz) 让我们简单地说一下,我想引用的类型是String ku

当我使用以下代码时,我的IDE会生成警告:

aMethod(List.class);
“类型安全:类型列表的表达式需要未经检查的转换才能符合…” 遗憾的是,当我试图让IDE修复它时,它不起作用。推断泛型类型的正确语法是什么?如需任何帮助,请提前通知Thx

编辑:

方法签字:

public static <T> T aMethod(Class<T> clazz)  
publicstatict方法(类clazz)
让我们简单地说一下,我想引用的类型是
String


kuku

如果您只想从代码中删除警告:

aMethod(Class<?> clazz);
aMethod(类clazz);
对于继承集合类的类,可以使用以下内容:

public <T extends Collection<?>> void clazz(Class<T> clazz);

public
List.class
就是我们所知道的原始类型

泛型使用类型擦除从编译代码中删除参数化类型。类型安全检查仅在编译时完成。编译器确保只向列表中添加字符串

在运行时,字符串消失了,您的
列表
的功能与前泛型列表完全相同。因此,您将它传递给一个方法,该方法试图猜测
T
列表中是什么。但它永远无法确定这一点,因为信息将不复存在

由于类型无法匹配,编译器警告您,您的代码可能允许对列表进行非类型安全访问。也就是说,由于
List
List
在运行时被视为相同的,并且都由
List.class
表示,因此您可能会将自己设置为这样一种情况:在运行时,您的代码可能会尝试将
字符串添加到
列表
,这将失败

另请参见


请给我们看
aMethod
的声明。如果您不切割它需要符合的内容,从中复制可能会使侦探工作更容易。。。或者提供
aMethod的签名
方法的签名:publicstatict-aMethod(Class clazz)它需要符合什么重要吗?让我们简化->字符串。上面显示的代码在IntelliJ和JDK5中编译良好,没有任何警告。你的文章中缺少了什么细节?你可能还想看看《有效Java SE》中的泛型一章,它正好涵盖了这个问题。泛型方法来自我正在使用的一个库。因此,我是否正确地理解,我唯一的选择就是压制警告。我想我可以将列表中包含字符串的信息传递给该方法。