gpt4 book ai didi

java - 为什么我在这段代码中收到 NoSuchMethodError 错误?

转载 作者:行者123 更新时间:2023-12-02 12:40:15 26 4
gpt4 key购买 nike

import java.util.*;

public class Lab50 {
public static void main(String[] args) {
System.out.println("Student Information");
TreeSet set = new TreeSet();
set.add(new Student(87, "Andy"));
set.add(new Student(99, "Bichel"));
set.add(new Student(12, "Chuck"));
set.add(new Student(45, "David"));

Iterator it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}

class Student implements Comparable {
int sid;
String name;

Student(int sid, String name) {
this.sid = sid;
this.name = name;
}

public int compareTo(Object obj) {
if (obj instanceof Student) {
Student st = (Student) obj;
return this.sid - st.sid;
}
return 0;
}

public String toString() {
return sid + "\t" + name;
}
}

我在添加 Andy 元素的第一行遇到错误。以下是控制台上的错误消息:

Exception in thread "main" java.lang.NoSuchMethodError: Student.(ILjava/lang/String;)V at Lab50.main(Lab50.java:6)

最佳答案

javadoc这个异常(exception)非常清楚:

Thrown when a particular method cannot be found.

这意味着:在运行时,当你的 JVM 执行一个类时; JVM想要调用某个方法。它查看相应的类 - 并且在该类中找不到具有该名称/签名的方法。在您的情况下,编译的 Student.class 只是包含适合预期用途的构造函数。

当你有 A.java 和 B.java 时就会发生这种情况; A 正在调用 B 中的某些内容。然后您更改 B.java,并重新编译它;但你忘了重新编译 A.java。

换句话说:您遇到了不一致的情况,某些 A 类试图使用 B.class 实际上不包含的某些 B 类的方法。

这里的真实答案是:确保编译的输出始终一致。含义:将所有内容重新编译在一起。

在“现实”世界中,此类事情是由构建系统处理的。换句话说:如果您想避免此类问题,请使用一个 IDE 来跟踪项目中的所有类,并在您将它们插入到代码中时告诉您此类问题;或者学习如何使用构建系统,例如 ant、maven、gradle...,它可以“清理”构建输出,或者自动重新编译所有需要重新编译的工件。

关于java - 为什么我在这段代码中收到 NoSuchMethodError 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44966021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com