ArrayList数据类型的Java重载

时间:2013-06-11 21:03:25

标签: java overloading

为什么我不能在同一个类中同时使用这两种方法?

public double foo(ArrayList<Integer>  x);
public double foo(ArrayList<Double>  d);

3 个答案:

答案 0 :(得分:4)

当Java实现泛型时,为了使字节码向后兼容,他们提出了类型擦除。这意味着在运行时,通用信息就消失了。所以签名真的是:

public double foo(ArrayList  x);
public double foo(ArrayList  d);

你有两种方法具有相同的签名。

这里的解决方案不是重载方法名称;将这两种方法命名为不同的名称。

这是Java Generics Tutorial Page on type erasure

答案 1 :(得分:1)

您的问题是两种方法都具有相同的方法签名。要重载方法,它们必须具有相同的名称和返回类型,但方法签名不同,在这种情况下,两个方法都接受一个数组列表。

答案 2 :(得分:-2)

为什么不尝试将其更改为:

public double fooInteger(ArrayList<Integer>  x);
public double fooDouble(ArrayList<Double>  d);

我的applet遇到了类似的问题,直到我更改了第二个数组的名称。