不兼容的类型:T#1不能转换为T#2
问题描述:
我要创建一个泛型类,首先我想说我的需求。我有不同的课程,例如A,B等。我将根据json对象创建一个类的实例。这个json对象将从文件中读取。该文件可能包含等效的json对象。基于它,我将使用GSON创建该类的一个实例。现在,我面对一个错误即incompatible types: T#1 cannot be converted to T#2
不兼容的类型:T#1不能转换为T#2
这是我的代码示例
public class JsonLoader<T> {
private final Gson gson = new Gson();
private final T content;
public <T> JsonLoader(Class<T> clazz, String filePath) throws IllegalFileException {
if (filePath.isEmpty() || filePath == null) {
throw new IllegalFileException("IllegalFileException: source file must required.");
}
try (Reader reader = new FileReader(filePath)) {
T content= gson.fromJson(reader, clazz);
this.content = content;
} catch (IOException e) {
throw new IllegalFileException(e.getMessage(),e);
}
}
public <T> T getObject() {
return this.content;
}
}
请帮助我。
答
当您在类上声明类型参数T
时,整个类的主体都可以访问该类型参数,因此不需要重新声明它。当你说public <T> JsonLoader
和public <T> T getObject
时,你实际上声明了具有相同名称的新类型参数,该类型参数影响类的类型参数。
这类似于如何可以声明其隐藏了场变量:
class Example {
int foo;
// parameter foo shadows the field foo
Example(int foo) {}
}
如果您删除的构造函数和方法,它应该只是工作的类型参数声明。
+0
是谢谢你..对象 –
你能发布更多关于错误的信息吗?电话号码? –
@Kevinrob'不相容的类型:推理变量T#1具有不兼容的边界 等式约束:T#2 上限:T#3,对象 其中T#1,T#2,T#3是类型变量: T#1延伸方法声明的对象fromJson(读卡器,类) T#2扩展对象在构造 JsonLoader声明(类,字符串) T#3扩展了类中声明JsonLoader' –