【问题标题】:Java/Eclipse swaps parameter order in method call, giving an errorJava/Eclipse在方法调用中交换参数顺序,报错
【发布时间】:2014-12-21 22:54:50
【问题描述】:

这段代码:

temp.set(pizzaArray.get(i), upIdx);

指的是这个方法(在我的 ArrayList 类中):

    public void set(T objectToSet, int index) {
    this.data[index] = objectToSet;
}

它会生成错误“ArrayList 类型中的方法 set(int, Pizza) 不适用于参数 (Pizza, int)。

这是一个自制的 ArrayList 类,而不是 Java 的内置类。 temp 是一个 ArrayList。我检查了所有我能想到的并重新启动了 Eclipse;为什么 Java 坚持我的 set 方法需要相反顺序的参数?

【问题讨论】:

  • 请正确格式化您的代码以使其更具可读性。
  • 你尝试清理你的项目了吗?
  • 我没有尝试过清洁,但没有帮助
  • "...检查了我能想到的所有内容...。"——这就是为什么经常要求您尽可能地精简代码然后发布所有内容的原因。这被 Java 或 eclipse 或其他任何东西“交换”的机会比你不理解你不理解的代码部分的机会要小得多。如果没有更多信息,我们无法帮助您理解它
  • 我注意到 Java 内置的 ArrayList 的参数顺序与我的相反,因此我将方法从 set 重命名为 setElementAtIndex。现在错误消息是“对于 ArrayList 类型的方法 setElementAtIndex(Pizza, int) 未定义。

标签: java eclipse


【解决方案1】:

我们没有你所有的代码,但很明显你的temp 变量引用了一个普通的java.util.ArrayList。将您的“本土”ArrayList 类重命名为不同的名称(MyArrayList 表示(一个不好的)示例),然后引用该类的实例

MyArrayList<Pizza> temp = new MyArrayList<>();

这应该可以解决您的问题。

如果您想保留您的 ArrayList 名称,那么只要您的文件顶部没有 import java.util.ArrayList 语句,那么编译器将引用您的 ArrayList,而不是 java.util 的。

【讨论】:

  • 谢谢,但我认为我的老师不会对此感到满意。肯定有某种方法可以消除歧义吗?
  • 确保文件顶部没有import java.util.ArrayList 语句?
【解决方案2】:

问题原来是标准 ArrayList 的导入语句,Eclipse 对我“有用地”隐藏了它。当我扩展导入列表时,它就在那里。删除它并按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多