5

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

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

3 回答 3

4

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

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

并且您有两个具有相同签名的方法。

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

这是关于类型擦除的 Java 泛型教程页面

于 2013-06-11T21:05:28.223 回答
1

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

于 2013-06-11T21:09:18.670 回答
-2

Why don't you try to change it to:

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

I had a similar problem with my applet until I changed the name of the second array.

于 2013-06-11T21:06:02.853 回答