gpt4 book ai didi

java - 这两种方法非常相似,我该如何简化?

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

我有以下代码克隆:

public ArrayList<Short> getShortList(ArrayList<Number> numberList) {
ArrayList<Short> shortList = new ArrayList<Short>();
for(Number n : numberList) {
shortList.add((Short)n);
}
return shortList;
}

public ArrayList<Long> getLongList(ArrayList<Number> numberList) {
ArrayList<Long> longList = new ArrayList<Long>();
for(Number n : numberList) {
longList.add((Long)n);
}
return longList;
}

我怎样才能实现这些方法的一个功能?我在将 ArrayList 的类型作为参数传递时遇到问题。

最佳答案

这将是实现所需行为的通用方法:

public <T> List<T> getList(List<? super T> numberList, Class<T> clazz) {
List<T> longList = new ArrayList<T>();
for(Object n : numberList) {
longList.add(clazz.cast(n));
}
return longList;
}

请注意,如果使用不当,该方法可能会抛出 ClassCastException

以下是如何使用该方法的示例:

List<Number> listNumber = new ArrayList<Number>();
listNumber.add(5L);
listNumber.add(10L);
listNumber.add(25L);
List<Long> listLong = getList(listNumber, Long.class);
System.out.println(listNumber);
System.out.println(listLong);
//this line will throw CastClassException because elements in listNumber are Long only
List<Short> listShort = getList(listNumber, Short.class);
System.out.println(listShort);

关于java - 这两种方法非常相似,我该如何简化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391177/

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