gpt4 book ai didi

java - 为什么我不能有两个带有 ArrayList 参数的方法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:58:54 24 4
gpt4 key购买 nike

为什么我不能创建两个参数都是数组列表但数据类型不同的重载方法?

public class test {
public static void main(String[] args){

ArrayList<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);
ints.add(3);
ints.add(4);
ints.add(5);

showFirst(ints);

ArrayList<Double> dubs = new ArrayList<Double>();
dubs.add(1.1);
dubs.add(2.2);
dubs.add(3.3);
dubs.add(4.4);
dubs.add(5.5);

showFirst(dubs);
}

public static void showFirst(ArrayList<Integer> a)
{
System.out.println(a.remove(0));
}

public static void showFirst(ArrayList<Double> a)
{
System.out.println(a.remove(0));
}
}

我在 eclipse 中,它用红色强调了导致代码的问题并给出了这条消息:Method showFirst(ArrayList<Integer>) has the same erasure showFirst(ArrayList<E>) as another method in type test

我让它工作的唯一方法是添加其他参数,例如 , int bshowFirst(ArrayList<Integer> a 之后和 , int bshowFirst(ArrayList<Double> a 之后.

有什么方法可以让这段代码按我预期的方式工作吗?如果不是,我想知道为什么会这样。

运行该程序会生成以下错误消息:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The method showFirst(ArrayList<Integer>) in the type test is not applicable for the arguments (ArrayList<Double>)
at test.test.main(test.java:25)

编辑:

使用 or ,如果我想在需要数据类型的地方做一些事情,比如:

public static int[] reverseInArray(ArrayList<Integer> a)
{
int n = a.size();
int[] b = new int[n];
while(n > 0)
{
b[n] = a.remove(0);
n--;
}
return b;
}

public static double[] reverseInArray(ArrayList<Double> a)
{
double n = a.size();
double[] b = new int[n];
while(I > 0)
{
b[n] = a.remove(0);
n--;
}
return b;
}

最佳答案

在运行时,每个 ArrayList<Whatever>将转换为 ArrayList (原始)由于 type erasure .所以,只有一种方法可以接收 List<? extends Number> .

//renamed to show what the method really does
public static void removeFirst(List<? extends Number> a) {
System.out.println(a.remove(0));
}

请注意,上述方法仅适用于 List s ( ArrayListLinkedListList 的其他实现)声明持有一个从 Number 扩展的类.如果您想要/需要一种方法从 List 中删除第一个元素拥有任何类型,使用 List<?>相反:

public static void removeFirst(List<?> a) {
System.out.println(a.remove(0));
}

记住永远program to interfaces instead of specific class implementation .

关于java - 为什么我不能有两个带有 ArrayList 参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22203854/

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