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

时间:2017-07-26 06:40:21

标签: java generics gson

我打算创建一个泛型类,首先我想说出我的要求。我有不同的类别,例如A,B等我将基于json对象创建一个类实例。这个json对象将从文件中读取。该文件可能包含等效的json对象。基于此,我将使用GSON创建该类的实例。现在我面临一个错误,即incompatible types: T#1 cannot be converted to 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;
    }
}

请帮帮我。

1 个答案:

答案 0 :(得分:4)

在类上声明类型参数enumerate时,整个类主体都可以访问该类型参数,因此您无需重新声明它。当您说10时,实际上是在声明具有相同名称的新类型参数,这会影响类的类型参数。

这与声明隐藏字段的变量的方式类似:

dfs = {}
for i, val in enumerate(df_names):
     dfs[val] = initilize_dataframes(sheet_names[i])

print (dfs[1])

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