什么导致“对象不是声明类的实例"? [英] What causes "object is not an instance of declaring class"?

查看:29
本文介绍了什么导致“对象不是声明类的实例"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
为什么我得到对象不是声明类的实例"使用反射调用方法时?

当我运行下面的代码时,为什么会抛出这个错误?

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆