【问题标题】:Why do I keep getting an error?为什么我不断收到错误消息?
【发布时间】:2014-04-12 00:06:36
【问题描述】:
public static void add3(ArrayList<Integer> a)
{
    Scanner console = new Scanner(System.in);
    int i = console.nextInt();
    a.add(i);
    i = console.nextInt();
    a.add(i);
    i = console.nextInt();
    a.add(i);
}
public static void add3(ArrayList<Double> a)
{
    Scanner console = new Scanner(System.in);
    double i = console.nextDouble();
    a.add(i);
    i = console.nextDouble();
    a.add(i);
    i = console.nextDouble();
    a.add(i);
}

当我运行我的程序时,Integer 版本可以工作,但 Double 版本不能。它一直给我一个错误,说该类型不适用于 add3(ArrayList a)。这让我很困惑,因为还有另一种类型为 double 的方法,但编译器似乎看不到它。有关如何使其工作的任何建议?谢谢。

【问题讨论】:

  • 你是如何调用这些方法的?
  • 肯定是因为类型擦除
  • 因为:类型擦除。这两个方法具有相同的签名。
  • 换句话说,尝试重命名一种方法。

标签: java methods arraylist integer double


【解决方案1】:

作为tutorial from Oracles states,由于type easure,这不起作用:

一个类不能有两个具有相同的重载方法 类型擦除后的签名。

public class Example {
    public void print(Set<String> strSet) { }
    public void print(Set<Integer> intSet) { } } 

重载将共享相同的类文件表示,并会产生编译时错误。

类型擦除后,这两个方法都将Set 作为它们的单个参数,并且无法相互区分。

【讨论】:

  • @AbhinavKumar 它不会。我怀疑 OP 不理解编译时错误和运行时错误之间的区别——他们只是在 IDE 中按下“运行”按钮。
  • 好的,我将如何在保持它们超载的同时修复它(我不想更改名称)?
  • @user3396838 你……不能。这不是 Java 的工作方式。您不能有两个具有相同参数的同名方法,在类型擦除之后就是您所拥有的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多