Epa*_*aga 10 java compiler-construction generics
我有以下方法:
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 );
                ^
问题是什么?
Aar*_*lla 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").