gpt4 book ai didi

java - 将多个方法组合成一个通用方法

转载 作者:行者123 更新时间:2023-12-01 23:08:12 25 4
gpt4 key购买 nike

如果我有“n”个这样的方法,有没有办法可以优化它并使其成为单个函数?

或者还有其他更好的选择可以使这个更通用吗?

public List<Address> getAddressList(String response) {
List<Address> AddressList = new ArrayList<Address>();
if (response != null && response.length() > 0) {
try {
Gson gson = new Gson();
Type collectionType = new TypeToken<List<Address>>(){}.getType();
AddressList = gson.fromJson(response, collectionType);
} catch (IllegalStateException ex) {
} catch (Exception ex) {
}
}
return AddressList;
}

public List<Tweet> getTweetList(String response) {
List<Tweet> tweetList = new ArrayList<Tweet>();
if (response != null && response.length() > 0) {
try {
Gson gson = new Gson();
Type collectionType = new TypeToken<List<Tweet>>(){}.getType();
tweetList = gson.fromJson(response, collectionType);
} catch (IllegalStateException ex) {
} catch (Exception ex) {
}
}
return tweetList;
}

最佳答案

复制 this here question 中 axtavt 的答案:

<小时/>

如果不传递 T 的实际类型,就无法做到这一点(如 Class<T> )到您的方法。

但是如果你明确地传递它,你可以创建一个 TypeToken对于 List<T>如下:

private <T> List<T> GetListFromFile(String filename, Class<T> elementType) {
...
TypeToken<List<T>> token = new TypeToken<List<T>>() {}
.where(new TypeParameter<T>() {}, elementType);
List<T> something = gson.fromJson(data, token);
...
}

另请参阅:

<小时/>

因此,要回答您的问题,您可以这样做:

public List<Address> getAddressList(final String response) {
return getGenericList(response, Address.class);
}

public List<Tweet> getTweetList(final String response) {
return getGenericList(response, Tweet.class);
}

@SuppressWarnings("serial")
private <T> List<T> getGenericList(final String response, final Class<T> elementType) {
List<T> list = new ArrayList<T>();
if (response != null && response.length() > 0) {
try {
final Gson gson = new Gson();
final Type collectionType =
new TypeToken<List<T>>(){}.where(new TypeParameter<T>() {}, elementType).getType();
list = gson.fromJson(response, collectionType);
}
catch (final IllegalStateException ex) {
}
catch (final Exception ex) {
}
}
return list;
}

编辑:尝试了代码

我通过以下小测试尝试了此代码,该测试应该只创建几个地址的列表:

public static void main(final String[] args) {
final List<Address> addressList = getAddressList("[{}, {}]");
System.out.println(addressList);
}

输出是:

[gson.Address@6037fb1e, gson.Address@7b479feb]

我在测试项目中创建了自己的 Address 类,因此上面的输出中有 gson.Address 。

关于java - 将多个方法组合成一个通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451672/

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