Java类反射:使用通配符参数初始化外部类

我已经为期2天的搜索此问题的解决方案,现在必须在这里提出问题:-(我的问题:


我创建了新的自定义Java类:


package my.app.test;


class Test extends Object {

    Test(){


    }


    public void print(){

        System.out.println("success");

    }

}

在另一个包中,我有:


package my.app.test2;


public class Test2 {

    Test2(Class<? extends Object> Test){


    }


    public void execute(Class<? extends Object> Test){


    }

}

现在,我想用Test.class来将Test2.class扩展为参数:


package my.app.test;


import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;


public class Index {

    Index(){}


    static public void inflate(){

        ClassLoader loader = Thread.currentThread().getContextClassLoader();

        if(loader != null)

            try {

                Class<?> Test2 = Class.forName("my.app.test2.Test2", false, loader);

                if(Test2 != null){

                    Class<?>[] types = new Class[1];

                    types[0] = Test.class;

                    Method m = Test2.getDeclaredMethod("execute", types);

                    m.setAccessible(true);

                    try {

                        m.invoke(Test.class, new Test());

                    } catch (IllegalAccessException e) {

                        e.printStackTrace();

                    } catch (InvocationTargetException e) {

                        e.printStackTrace();

                    }

                }

            } catch (NoSuchMethodException | ClassNotFoundException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

    }

}

但我得到错误:


java.lang.NoSuchMethodException: my.app.test2.Test2.execute(my.app.test.Test)

如果可以的话?


哈士奇WWW
浏览 197回答 3
3回答

慕码人8056858

您的Test2课程没有喜欢的方法,execute(Test)但是有execute(Class)。你应该做的Test2.getDeclaredMethod("execute", Class.class)。

长风秋雁

如果您必须使用泛型类型,则在运行时会删除泛型Object类型。有关详细信息,请参见Java Type Erasure;有关主题的详细说明,请参见Baeldung。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java