Java 我如何简化这两种方法,它们非常相似?
我有以下代码克隆:Java 我如何简化这两种方法,它们非常相似?,java,arraylist,Java,Arraylist,我有以下代码克隆: public ArrayList<Short> getShortList(ArrayList<Number> numberList) { ArrayList<Short> shortList = new ArrayList<Short>(); for(Number n : numberList) { shortList.add((Short)n); } return shortLi
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;
}
public ArrayList getShortList(ArrayList numberList){
ArrayList短名单=新的ArrayList();
for(编号n:numberList){
短名单。添加((短)n);
}
返回短名单;
}
公共ArrayList getLongList(ArrayList numberList){
ArrayList longList=新的ArrayList();
for(编号n:numberList){
长列表。添加((长)n);
}
返回长列表;
}
如何实现这些方法的一个功能?我无法将ArrayList的类型作为参数传递。请尝试以下操作:
public <T extends Number> List<T> getList(List<Number> list) {
List<T> otherList = new ArrayList<T>();
for(Number n : list) {
otherList.add((T) n);
}
return otherList;
}
试试这个:
public <T extends Number> List<T> getList(List<Number> list) {
List<T> otherList = new ArrayList<T>();
for(Number n : list) {
otherList.add((T) n);
}
return otherList;
}
这是实现所需行为的一般方法:
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;
}
这是实现所需行为的一般方法:
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.addAll()实际上是这样做的,所以您可以删除这两个方法。Title显示了三个,但您只发布了两个。您是否了解,如果这些方法被误用,它们会在运行时抛出一个ClassCastException
。顺便说一句,list.addAll()实际上是这样做的,因此您可以删除这两个方法。您遗漏了作为参数的Number
。该方法的参数是list
,但返回类型是list
。所以你建议的方法不一样。至少让T扩展数字
。我认为如果大多数ArrayList
s是List
s会更好。参数应该是List为什么参数应该是List您错过了作为参数的Number
。方法的参数是List
,但返回类型是List
。所以你建议的方法不一样。至少让T扩展数字
。我认为如果大多数ArrayList
s是List
s会更好。参数应该是list为什么参数应该是list有一天,生成的ArrayList应该被转换为ArrayList或ArrayList,然后我需要这些方法在那里?@n00b1990提供了一个代码,显示了这种方法的优点和缺点。谢谢你的帮助,Luiggi,我很感激。方法中的arraylist不应该是列表吗,因为这是返回类型?@n00b1990arraylist
实现了List
接口,这就是代码编译的原因。但是,如果变量也声明为List
则更好。更新代码。总有一天会将生成的ArrayList转换为ArrayList或ArrayList,然后我需要这些方法吗?@n00b1990提供了一段代码,显示了这种方法的优点和缺点。感谢您的帮助Luiggi,我非常感谢。方法中的arraylist不应该是列表吗,因为这是返回类型?@n00b1990arraylist
实现了List
接口,这就是代码编译的原因。但是,如果变量也声明为List
则更好。更新代码。