亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

面向對象編程 - java動態加載和類型轉換問題?

瀏覽:106日期:2023-12-28 11:02:56

問題描述

我有 A1.java, A2.java, A3.java ... A10.java 等十個類(也許更多);

他們里面都有一個public static String getResponse()的方法,不過里面所做的事情和回復的字符串都不一樣;

我還有一個變量 String name = 'A1';,不確定變量里面的到底是哪一個類的名字,不過肯定是這是個類里面的一個。

我想當我收到這個name變量之后動態調用所對應的類的getResponse方法,而且不想用if-else一個個判斷。

試了下下面的代碼,forName回復的是一個class對象,好像不能強制類型轉換。能轉換也不知道到底轉換成哪一個對象,我不想一個個if-else判斷。

String result = Class.forName(name).getResponse();我應該怎么做呢? 有沒有好的建議?

問題解答

回答1:

這個就是 Java 反射的運用吧.首先你需要通過 Class.forName 獲取一個類的 Class 對象, 然后通過這個 Class 對象的 getMethod 方法獲取指定的方法對象(Method), 最后通過這個 Method 對象來調用此方法.用源碼表示:

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獲取的就是類對象。然后你可以通過這個類對象的getMethod方法獲取對應的方法。然后invoke對應的方法

回答3:

能否讓這10多個類都實現一個接口,比如

public interface A0 { public String getResponse();}

然后A1、A2...都implements A0,并實現getResponse(只是不能定義成static了)。

然后就能這么寫了:

String result = ((A0) Class.forName(name).newInstance()).getResponse();回答4:

除了反射以外,用Spring也可以。根絕獲得的字符串去get一個bean,然后調用方法。

標簽: java
相關文章:
主站蜘蛛池模板: 久久99欧美| 国产精品v欧美精品v日韩 | 黄色录像一级片 | 国产精品成人69xxx免费视频 | 欧美日韩亚洲精品一区二区三区 | 成年性午夜免费视频网站不卡 | 国产在线综合一区二区三区 | 日本一二区免费 | 日韩国产一区二区 | 国产一区欧美 | 男人你懂的网站 | 国产成版人视频网站免费下 | 久久精品国产69国产精品亚洲 | 免费精品精品国产欧美在线 | 日本人伦一区二区三区 | 久久专区| 国产一级内谢a级高清毛片 国产一级毛片大陆 | 日本成a人片在线观看网址 日本成人一区二区 | 日韩黄色精品 | 欧美精品人爱a欧美精品 | 日韩欧美中文字幕在线播放 | 成人免费视频在线播放 | 成人午夜在线观看 | baoyu131成人免费视频 | 欧美激情特级黄aa毛片 | 国产精品视频成人 | 欧美黑人两根巨大挤入 | 99精品国产美女福到在线不卡 | 欧美第五页 | 亚洲欧美久久久久久久久久爽网站 | 91入口| 男女草| 91精品啪国产在线观看免费牛牛 | 激情影院在线视频永久观看 | 日韩精品一区二区三区中文字幕 | 国产精品v一区二区三区 | 亚洲无限乱码一二三四区 | 天天拍拍天天爽免费视频 | 黑人日b | 国产高清乱码无卡女大生 | 69精品免费视频 |