ArrayList数据类型的Java重载

C g*_*ics 5 java overloading

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

public double foo(ArrayList<Integer>  x);
public double foo(ArrayList<Double>  d);
Run Code Online (Sandbox Code Playgroud)

rge*_*man 4

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

public double foo(ArrayList  x);
public double foo(ArrayList  d);
Run Code Online (Sandbox Code Playgroud)

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

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

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