gpt4 book ai didi

java - 类型删除,在参数中传递 Class

转载 作者:行者123 更新时间:2023-11-30 09:42:54 25 4
gpt4 key购买 nike

当我打电话时:

ArrayList<MyType> myobject = new Gson().fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());

一切正常,使用 fromJson(String, Type)
当我打电话时:

ArrayList<MyType> myobject = helper(data);

public ArrayList<MyType> helper(String data){
return new Gson().fromJson(data, new TypeToken<ArrayList<MyType>>(){}.getType());
}

它仍然工作正常,但是当我调用时:

ArrayList<MyType> myobject = helper(data, MyType.class);

public <T> ArrayList<T> helper(String data, Class<T> type){
return new Gson().fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());
}

类型参数不正确。
如何修复最后一个代码片段?

解决方案

正如@LewsTherin 所建议的,我只是简单地给出了来自调用者的参数的确切类型
所以 helper 声明是这样的:

public <T> ArrayList<T> helper(String data, Type type){
ArrayList<T> rtn = g.fromJson(data, type);
return rtn;
}

然后这样调用:

variable = helper(data, new TypeToken<ArrayList<MyType>>(){}.getType());

但是如果有人可以编辑辅助函数来简化代码,我肯定会标记他是正确的!

最佳答案

我不认为如果你在辅助函数中使用它会起作用。解决方案可能是从调用方法传递类型。所以很清楚发生了什么。

return new Gson().fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());

这实际上并不是指定对象的Class类型。那么为什么它不起作用?

关于java - 类型删除,在参数中传递 Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com