Java 不兼容类型:T#1无法转换为T#2

Java 不兼容类型:T#1无法转换为T#2,java,generics,gson,Java,Generics,Gson,我将创建一个泛型类,首先我想说明我的需求。我有不同的类,例如A、B等。我将基于json对象创建一个类的实例。此json对象将从文件中读取。该文件可能包含等效的json对象。在此基础上,我将使用GSON创建该类的实例。现在我面临一个错误,即不兼容类型:T#1无法转换为T#2 这是我的代码示例 public class JsonLoader<T> { private final Gson gson = new Gson(); private final T cont

我将创建一个泛型类,首先我想说明我的需求。我有不同的类,例如A、B等。我将基于json对象创建一个类的实例。此json对象将从文件中读取。该文件可能包含等效的json对象。在此基础上,我将使用GSON创建该类的实例。现在我面临一个错误,即
不兼容类型: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;
    }
}
公共类JsonLoader{
私有最终Gson Gson=新Gson();
私人最终T内容;
公共JsonLoader(类clazz,字符串filePath)抛出IllegalFileException{
if(filePath.isEmpty()| | filePath==null){
抛出新的IllegalFileException(“IllegalFileException:源文件必须是必需的。”);
}
try(Reader=newfilereader(filePath)){
T content=gson.fromJson(reader,clazz);
this.content=内容;
}捕获(IOE异常){
抛出新的非法文件异常(e.getMessage(),e);
}
}
公共T getObject(){
返回此.content;
}
}

请帮帮我。

在类上声明类型参数
T
时,整个类主体都可以访问该类型参数,因此不需要重新声明它。当您说
publicjsonLoader
publicgetobject
时,实际上是在用相同的名称声明新的类型参数,这些参数将类型参数隐藏在类上

这类似于您如何声明隐藏字段的变量:

class Example {
    int foo;
    // parameter foo shadows the field foo
    Example(int foo) {}
}

如果删除构造函数和方法上的类型参数声明,它应该可以正常工作。

在类上声明类型参数
T
时,整个类主体都可以访问该类型参数,因此不需要重新声明它。当您说
publicjsonLoader
publicgetobject
时,实际上是在用相同的名称声明新的类型参数,这些参数将类型参数隐藏在类上

这类似于您如何声明隐藏字段的变量:

class Example {
    int foo;
    // parameter foo shadows the field foo
    Example(int foo) {}
}

如果删除构造函数和方法上的类型参数声明,它应该可以正常工作。

您可以发布有关错误的更多信息吗?行号?@Kevinrob
不兼容类型:推理变量T#1具有不兼容的边界相等约束:T#2上界:T#3,对象,其中T#1、T#2、T#3是类型变量:T#1扩展方法中声明的对象fromJson(读取器、类)T#2扩展构造函数JsonLoader中声明的对象(类、字符串)T#3扩展类JsonLoader中声明的对象
您可以发布有关错误的更多信息吗?行号?@Kevinrob
不兼容类型:推理变量T#1具有不兼容的边界相等约束:T#2上界:T#3,对象,其中T#1、T#2、T#3是类型变量:T#1扩展方法中声明的对象fromJson(读取器、类)T#2扩展构造函数JsonLoader中声明的对象(类、字符串)T#3扩展类JsonLoader中声明的对象