我已经为期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)如果可以的话?
3 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
您的Test2
课程没有喜欢的方法,execute(Test)
但是有execute(Class)
。你应该做的Test2.getDeclaredMethod("execute", Class.class)
。
长风秋雁
TA贡献1757条经验 获得超7个赞
如果您必须使用泛型类型,则在运行时会删除泛型Object
类型。有关详细信息,请参见Java Type Erasure;有关主题的详细说明,请参见Baeldung。
添加回答
举报
0/150
提交
取消