可能重复:
为什么我得到“对象不是声明类的实例”当调用使用反射的方法时?
当我运行下面的代码时,它为什么会抛出这个错误?
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.Test.main(Test.java:10)
这是我的主要课程:
package com;
public class TestMain {
private String strName = "abcdefg...";
@SuppressWarnings("unused")
private void display(){
System.out.println(strName);
}
}
还有我的测试班:
package com;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
Class<TestMain> tm = null;
try{
tm= TestMain.class;
Method m1 =tm.getDeclaredMethod("display");
m1.setAccessible(true);
m1.invoke(tm);
}catch(Exception e){
e.printStackTrace();
}
}
}
这是我修改过的代码,谢谢:
package com;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
TestMain tm =new TestMain();
try{
Method m1 = tm.getClass().getDeclaredMethod("display");
m1.setAccessible(true);
m1.invoke(tm);
}catch(Exception e){
e.printStackTrace();
}
}
}
您需要一个实例,而不是类:
TestMain object = // get TestMain object here
m1.invoke(object);
或者,如果您指的是静态方法,请提供null作为第一个参数:
m1.invoke(null);
m1
需要在TestMain
类的实例上调用,而不是在类本身上调用(即在new TestMain()
创建的对象上(。