三國(guó)紛爭(zhēng)
2022-09-21 21:40:08
在Java中,我通常通過反射來調(diào)用一個(gè)方法,該方法通過使用以下方法構(gòu)建我的參數(shù)來使用a作為參數(shù):interfaceMethod method = theClass.getMethod("methodName", new Class[]{ IAnyInterface.class });但是我不知道當(dāng) 嵌套在私有類中時(shí)如何執(zhí)行此操作:,其中是:interfaceJSomething.INestedInterfaceJSomethingprivateprivate class JSomething { public void init(INestedInterface iSomething) { ... } public interface INestedInterface { public void notify(); } ...}在這里使用這個(gè)甚至不能編譯,因?yàn)榻涌谑遣豢稍L問的:Method method = theClass.getMethod("init", new Class[]{JSomething.INestedInterface.class});我已經(jīng)創(chuàng)建了一個(gè)準(zhǔn)備被調(diào)用的代理處理程序,但是當(dāng)我無法使用嵌套接口名稱時(shí),我被困在嘗試構(gòu)建參數(shù)中,有什么建議嗎?class
1 回答

慕姐4208626
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
嗯,你確定你的代碼是通過在類前面加上前綴來編譯的嗎?
該可見性修飾符不允許用于第一級(jí)類。每private
JLS 8.1.1
訪問修飾符,并且僅與直接封閉的類聲明中的成員類有關(guān)。
protected
private
但無論如何,你可以通過反射提取,太;)Class
final Class<?> clazz = Class.forName("your.package.JSomething$INestedInterface"); theClass.getMethod("methodName", new Class[]{ clazz });
或者,如果您的類本身就是一個(gè)內(nèi)部類JSomething
static
final Class<?> clazz = Class.forName("your.package.WrapperClass$JSomething$INestedInterface"); theClass.getMethod("methodName", new Class[]{ clazz });
請(qǐng)注意,每個(gè)“嵌套級(jí)別”都由一個(gè)符號(hào)標(biāo)記,并且傳入的稱為類的二進(jìn)制名稱(請(qǐng)參閱JLS 13.1)。$
String
頂級(jí)類型 (§7.6) 的二進(jìn)制名稱是其規(guī)范名稱 (§6.7)。
成員類型的二進(jìn)制名稱 (§8.5, §9.5) 由其緊接類型的二進(jìn)制名稱組成,后跟 ,后跟成員的簡(jiǎn)單名稱。
$
順便說一句,接受 var-arg 參數(shù),因此您只需提交單個(gè)值getMethod
theClass.getMethod("methodName", clazz);
添加回答
舉報(bào)
0/150
提交
取消