当我运行下面的代码时,为什么会抛出此错误?
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)
Run Code Online (Sandbox Code Playgroud)
这是我的主要课程:
package com;
public class TestMain {
private String strName = "abcdefg...";
@SuppressWarnings("unused")
private void display(){
System.out.println(strName);
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试班:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我修改过的代码,谢谢:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Sea*_*oyd 23
你需要一个实例,而不是类:
TestMain object = // get TestMain object here
m1.invoke(object);
Run Code Online (Sandbox Code Playgroud)
或者,如果您的意思是静态方法,请将null作为第一个参数提供:
m1.invoke(null);
Run Code Online (Sandbox Code Playgroud)