Java使用Getter/Setter访问私有变量时出现NoSuchMethodError错误
Java中Getter/Setter调用出现NoSuchMethodError的解决方法
问题现象
调用Employee类的setName()、getId()等方法时,主类抛出错误:
Exception in thread "main" java.lang.NoSuchMethodError: 'void Employee.setName(java.lang.String)' at getterssetters_41.main(getterssetters_41.java:5)
可能原因及解决步骤
1. 编译字节码不一致
最常见的原因是Employee类的修改未重新编译,主类调用的还是旧版本的字节码文件:
- 手动编译时,先编译Employee类:
javac Employee.java,再编译主类javac getterssetters_41.java,最后运行java getterssetters_41。 - 使用IDE的话,执行「Clean Project」清除旧字节码,再重新构建项目。
2. 类与方法的访问权限问题
- 你的Employee类是默认包访问权限(无public修饰),如果主类和Employee类不在同一个包下,需要给Employee类加上
public修饰符:
public class Employee { // ... 原有代码 }
- 确保Getter/Setter方法都是
public修饰,你的代码里已符合要求,但如果方法权限被误改为private/default,也会导致无法调用。
3. 方法签名拼写错误
开发中容易出现大小写错误(比如setname而非setName)、参数类型不匹配(比如把String写成int)。仔细核对方法名、参数类型,确保和调用处完全一致。
你的代码参考
主类代码:
public class getterssetters_41 { public static void main(String args[]) { Employee emp1 = new Employee(); String anurag="Anurag"; emp1.setName(anurag); System.out.println(emp1.getName()); emp1.setId(1); System.out.println(emp1.getId()); } }
Employee类代码:
class Employee { private int id; private String name; public String getName(){ return this.name; } public void setName(String n){ name = n; } public void setId(int i){ id = i; } public int getId(){ return this.id; } }
内容的提问来源于stack exchange,提问作者Anurag Shirvatkar
相关产品推荐
相关产品推荐

