第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java反思:如何調(diào)用一個(gè)以私有接口作為參數(shù)的方法?

Java反思:如何調(diào)用一個(gè)以私有接口作為參數(shù)的方法?

三國(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í)類。每privateJLS 8.1.1

訪問修飾符,并且僅與直接封閉的類聲明中的成員類有關(guān)。protectedprivate


但無論如何,你可以通過反射提取,太;)Class

final Class<?> clazz = Class.forName("your.package.JSomething$INestedInterface");
theClass.getMethod("methodName", new Class[]{ clazz });

或者,如果您的類本身就是一個(gè)內(nèi)部JSomethingstatic

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);


查看完整回答
反對(duì) 回復(fù) 2022-09-21
  • 1 回答
  • 0 關(guān)注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)