我有以下方法:
public <T> T fromJson( Reader jsonData, Class<T> clazz ) {
return fromJson( jsonData, (Type)clazz );
}
public <T> T fromJson( Reader jsonData, Type clazz ) {
...
}
编译器说的是第一种方法:
type parameters of <T>T cannot be determined;
no unique maximal instance exists for type variable T
with upper bounds T,java.lang.Object
return fromJson( jsonData, (Type)clazz );
^
有什么问题?
答案 0 :(得分:16)
问题是第二种方法的定义:
public <T> T fromJson( Reader jsonData, Type clazz ) {
编译器无法确定T
可能具有的类型。您必须在此处返回Object
,因为您无法使用Type<T> clazz
(Type
不支持通用)。
这导致第一种方法中的强制转换(T)
会引发警告。要摆脱这种警告,您有两种选择:
告诉编译器类型。使用这个(奇数)语法:
this.<T>fromJson( jsonData, (Type)clazz );
请注意,您需要this
,因为仅<T>fromJson()
是非法语法。
使用注释@SuppressWarnings("unchecked")
。
答案 1 :(得分:13)
我遇到了同样的问题,发现它是JDK中的一个错误(#6302954)。它固定在jdk 6u25。
我解决了这个问题的一个实例,但决定更新CI框上的JDK版本。
答案 2 :(得分:1)
我在NetBeans中编译时也遇到了类似的问题。 我所要做的就是在设置&gt;中将JDK版本从16位更改为32位。编译&gt; Java平台。