NoSuchMethodException反射异常处理
NoSuchMethodException意思是没有找到该方法。反射异常处理,记录下出现这个异常的原因
实体类
import lombok.Data;
@Data
public class Student {
private Long age;
private String name;
}
控制类
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test01 {
public static void main(String[] args) {
Test01 test01 = new Test01();
test01.getName(new Student());
}
public <T> void getName(T tClass){
Method[] declaredMethods = tClass.getClass().getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println(declaredMethod);
}
try {
Method setAge = tClass.getClass().getDeclaredMethod("setAge");
setAge.setAccessible(true);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
控制台
public boolean com.fanshe.Student.equals(java.lang.Object)
public java.lang.String com.fanshe.Student.toString()
public int com.fanshe.Student.hashCode()
public java.lang.String com.fanshe.Student.getName()
public void com.fanshe.Student.setName(java.lang.String)
public java.lang.Long com.fanshe.Student.getAge()
public void com.fanshe.Student.setAge(java.lang.Long)
protected boolean com.fanshe.Student.canEqual(java.lang.Object)
java.lang.NoSuchMethodException: com.fanshe.Student.setAge()
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at com.fanshe.Test01.getName(Test01.java:19)
at com.fanshe.Test01.main(Test01.java:9)
报错原因可能如下
- 查询的方法为私有的
- 方法有入参,但是查询方法确没有传入参类型
- 查询的方法不存在
题主的问题,获取带有入参的方法,未设置入参
解决:在反射查询方法第二个参数添加入参类型即可
Method setAge = tClass.getClass().getDeclaredMethod("setAge",Long.class);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步