什么导致“对象不是声明类的实例"? [英] What causes "object is not an instance of declaring class"?
本文介绍了什么导致“对象不是声明类的实例"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可能的重复:
为什么我得到对象不是声明类的实例"使用反射调用方法时?
当我运行下面的代码时,为什么会抛出这个错误?
When I run the code below, why does it throw this error?
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();
}
}
}
这是我修改后的代码,谢谢:
This is my modified code, thank you:
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();
}
}
}
推荐答案
你需要一个实例,而不是类:
You need an instance, not the class:
TestMain object = // get TestMain object here
m1.invoke(object);
或者,如果您的意思是静态方法,请提供 null 作为第一个参数:
Or if you mean a static method, supply null as first parameter:
m1.invoke(null);
这篇关于什么导致“对象不是声明类的实例"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文