为什么我不能在同一个类中同时使用这两种方法?
public double foo(ArrayList<Integer> x);
public double foo(ArrayList<Double> d);
答案 0 :(得分:4)
当Java实现泛型时,为了使字节码向后兼容,他们提出了类型擦除。这意味着在运行时,通用信息就消失了。所以签名真的是:
public double foo(ArrayList x);
public double foo(ArrayList d);
你有两种方法具有相同的签名。
这里的解决方案不是重载方法名称;将这两种方法命名为不同的名称。
答案 1 :(得分:1)
您的问题是两种方法都具有相同的方法签名。要重载方法,它们必须具有相同的名称和返回类型,但方法签名不同,在这种情况下,两个方法都接受一个数组列表。
答案 2 :(得分:-2)
为什么不尝试将其更改为:
public double fooInteger(ArrayList<Integer> x);
public double fooDouble(ArrayList<Double> d);
我的applet遇到了类似的问题,直到我更改了第二个数组的名称。