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 ) {
...
}
Run Code Online (Sandbox Code Playgroud)
编译器说的是第一种方法:
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 );
^
Run Code Online (Sandbox Code Playgroud)
问题是什么?
Aar*_*lla 16
问题是第二种方法的定义:
public <T> T fromJson( Reader jsonData, Type clazz ) {
Run Code Online (Sandbox Code Playgroud)
编译器无法确定T可能具有的类型.您必须返回Object此处,因为您无法使用Type<T> clazz(Type不支持泛型).
这导致(T)第一种方法中的强制转换会引起警告.要摆脱这种警告,您有两种选择:
告诉编译器类型.使用这个(奇数)语法:
this.<T>fromJson( jsonData, (Type)clazz );
Run Code Online (Sandbox Code Playgroud)
请注意,您需要this这里,因为<T>fromJson()单独是非法语法.
使用注释@SuppressWarnings("unchecked").
| 归档时间: |
|
| 查看次数: |
9639 次 |
| 最近记录: |