gpt4 book ai didi

Java 泛型方法没有按预期工作

转载 作者:行者123 更新时间:2023-11-30 08:33:49 25 4
gpt4 key购买 nike

我正在尝试为数据反序列化创建一个通用方法。

我的代码:

public <T> ExportedData<T> getExportData(T classType, String exportUri) {
Response response = _client.get(exportUri);
// System.out.println(response.body.toString());
ExportedData<T> exportedData = GsonSingleton.getGson().fromJson(response.body.toString(), new TypeToken<ExportedData<T>>() {
}.getType());
return exportedData;
}

response.body:

{"totalResults":2,"limit":50000,"offset":0,"count":2,"hasMore":false,"items":[{"DevicesIDs":"","EmailAddress":"zatokar@gmail.com"},{"DevicesIDs":"","EmailAddress":"oto@increase.dk"}]}

我调用泛型方法的方式:

ExportedData<AccengageOutboundContact> exportedData = generalBulkHelper.getExportData(new AccengageOutboundContact(), uriLimitAndOffset);

AccengageOutboundContact:

public class AccengageOutboundContact {

public String EmailAddress;
public String DevicesIDs;

}

ExportedData:

public class ExportedData<T> {
public int totalResults;
public int limit;
public int offset;
public int count;
public boolean hasMore;
public List<T> items;
}

我希望获得一个包含 AccengageOutboundContact 对象的 ArrayList。我得到的是 StringMap 的 ArrayList。

知道我做错了什么吗?

最佳答案

这个我已经看过很多次了,但是似乎没有一个很好的副本可以链接。


基本上,问题是 T 在您的通用方法中被删除为 Object。因此,创建的 TypeToken 不包含所需的信息。

这导致反序列化为 StringMap


您可以通过将完整的 TypeToken 传递给您的方法来解决此问题:

public <T> ExportedData<T> getExportData(TypeToken<ExportedData<T>> tt, String exportUri) {
Response response = _client.get(exportUri);
// System.out.println(response.body.toString());
ExportedData<T> exportedData = GsonSingleton.getGson().fromJson(response.body.toString(),
tt.getType());
return exportedData;
}

然后这样调用:

generalBulkHelper.getExportData(new TypeToken<ExportedData<AccengageOutboundContact>>(){},
uriLimitAndOffset);

关于Java 泛型方法没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39229603/

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