可能重复:
Why do I get “object is not an instance of declaring class” when invoking a method using reflection?
当我运行下面的代码时,为什么会抛出此错误?
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();
}
}
}
答案 0 :(得分:23)
您需要一个实例,而不是类:
TestMain object = // get TestMain object here
m1.invoke(object);
或者,如果您的意思是静态方法,请将null作为第一个参数提供:
m1.invoke(null);
答案 1 :(得分:1)
m1
需要在TestMain
类的实例上调用,而不是在类本身上调用(即在new TestMain()
创建的对象上)。