Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何简化这两种方法,它们非常相似?_Java_Arraylist - Fatal编程技术网

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不应该是列表吗,因为这是返回类型?@n00b1990
arraylist
实现了
List
接口,这就是代码编译的原因。但是,如果变量也声明为
List
则更好。更新代码。总有一天会将生成的ArrayList转换为ArrayList或ArrayList,然后我需要这些方法吗?@n00b1990提供了一段代码,显示了这种方法的优点和缺点。感谢您的帮助Luiggi,我非常感谢。方法中的arraylist不应该是列表吗,因为这是返回类型?@n00b1990
arraylist
实现了
List
接口,这就是代码编译的原因。但是,如果变量也声明为
List
则更好。更新代码。