面向?qū)ο缶幊?- java動(dòng)態(tài)加載和類型轉(zhuǎn)換問題?
問題描述
我有 A1.java, A2.java, A3.java ... A10.java 等十個(gè)類(也許更多);
他們里面都有一個(gè)public static String getResponse()的方法,不過里面所做的事情和回復(fù)的字符串都不一樣;
我還有一個(gè)變量 String name = 'A1';,不確定變量里面的到底是哪一個(gè)類的名字,不過肯定是這是個(gè)類里面的一個(gè)。
我想當(dāng)我收到這個(gè)name變量之后動(dòng)態(tài)調(diào)用所對(duì)應(yīng)的類的getResponse方法,而且不想用if-else一個(gè)個(gè)判斷。
試了下下面的代碼,forName回復(fù)的是一個(gè)class對(duì)象,好像不能強(qiáng)制類型轉(zhuǎn)換。能轉(zhuǎn)換也不知道到底轉(zhuǎn)換成哪一個(gè)對(duì)象,我不想一個(gè)個(gè)if-else判斷。
String result = Class.forName(name).getResponse();我應(yīng)該怎么做呢? 有沒有好的建議?
問題解答
回答1:這個(gè)就是 Java 反射的運(yùn)用吧.首先你需要通過 Class.forName 獲取一個(gè)類的 Class 對(duì)象, 然后通過這個(gè) Class 對(duì)象的 getMethod 方法獲取指定的方法對(duì)象(Method), 最后通過這個(gè) Method 對(duì)象來調(diào)用此方法.用源碼表示:
public class Test { public static String getResponse() {return 'This is Test.getResponse'; } public static void main(String[] args) throws Exception {String name = 'com.test.Test';String methodName = 'getResponse';Class<?> threadClazz = Class.forName(name);Method method = threadClazz.getDeclaredMethod(methodName);System.out.println(method.invoke(null)); }}回答2:
class.forName獲取的就是類對(duì)象。然后你可以通過這個(gè)類對(duì)象的getMethod方法獲取對(duì)應(yīng)的方法。然后invoke對(duì)應(yīng)的方法
回答3:能否讓這10多個(gè)類都實(shí)現(xiàn)一個(gè)接口,比如
public interface A0 { public String getResponse();}
然后A1、A2...都implements A0,并實(shí)現(xiàn)getResponse(只是不能定義成static了)。
然后就能這么寫了:
String result = ((A0) Class.forName(name).newInstance()).getResponse();回答4:
除了反射以外,用Spring也可以。根絕獲得的字符串去get一個(gè)bean,然后調(diào)用方法。
相關(guān)文章:
1. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””2. docker-machine添加一個(gè)已有的docker主機(jī)問題3. css - 求推薦適用于vue2的框架 像bootstrap這種類型的4. Span標(biāo)簽5. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問題。6. SessionNotFoundException:會(huì)話ID為null。調(diào)用quit()后使用WebDriver嗎?(硒)7. android新手一枚,android使用httclient獲取服務(wù)器端數(shù)據(jù)失敗,但是用java工程運(yùn)行就可以成功獲取。8. css - 關(guān)于div自適應(yīng)問題,大家看圖吧,說不清9. redis啟動(dòng)有問題?10. java - Collections類里的swap函數(shù),源碼為什么要新定義一個(gè)final的List型變量l指向傳入的list?
