我已經(jīng)為期2天的搜索此問(wèn)題的解決方案,現(xiàn)在必須在這里提出問(wèn)題:-(我的問(wèn)題:我創(chuàng)建了新的自定義Java類(lèi):package my.app.test;class Test extends Object { Test(){ } public void print(){ System.out.println("success"); }}在另一個(gè)包中,我有:package my.app.test2;public class Test2 { Test2(Class<? extends Object> Test){ } public void execute(Class<? extends Object> Test){ }}現(xiàn)在,我想用Test.class來(lái)將Test2.class擴(kuò)展為參數(shù):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(); } }}但我得到錯(cuò)誤:java.lang.NoSuchMethodException: my.app.test2.Test2.execute(my.app.test.Test)如果可以的話(huà)?
3 回答

慕碼人8056858
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的Test2
課程沒(méi)有喜歡的方法,execute(Test)
但是有execute(Class)
。你應(yīng)該做的Test2.getDeclaredMethod("execute", Class.class)
。

長(zhǎng)風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您必須使用泛型類(lèi)型,則在運(yùn)行時(shí)會(huì)刪除泛型Object
類(lèi)型。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)Java Type Erasure;有關(guān)主題的詳細(xì)說(shuō)明,請(qǐng)參見(jiàn)Baeldung。
添加回答
舉報(bào)
0/150
提交
取消