为什么列表不能包含在`Integer ...'参数中

时间:2018-04-22 13:08:50

标签: java arrays list methods parameters

这就是我要做的事情:

public void add(Integer... newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}

我不确定原因,但我无法在方法中添加ArrayList<Integer>

我很高兴只是复制列表的方法,但我认为必须有一种更有效的方法。

我尝试了下面的想法,我可以为catch块做你能做的事情:

public void add(Integer... | List<Integer> newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}

然而,在快速StackOverfow之后,发现它是不可能的。还有其他办法吗?

2 个答案:

答案 0 :(得分:5)

接受Integer...的方法无法使用集合。它只能使用一个Integer数组。

你能做的最好就是使用方法重载。

public void add(Integer...newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}

public void add(List<Integer> newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}

就个人而言,我坚持使用上述内容,但如果你想避免代码重复,而是每次调用public void add(Integer...newIntegers) {...}时构建一个新列表,那么你可以像@Sweeper一样已在评论中提出。

public void add(Integer... newIntegers) {
     add(Arrays.asList(newIntegers));
}

public void add(List<Integer> newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}

答案 1 :(得分:2)

您可以通过执行以下代码来重载它,它将允许您重复使用先前创建的Add方法。

public void add(Integer...newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}

public void add(List<Integer> newIntegers) {
   add(newIntegers.stream().toArray(Integer[]::new));
}