2014-10-02 47 views
2

我有一個接口ZipCodeServer,其中類ZipCodeServerImpl實現。如何獲得Java反射以查找可調用函數?

我也有一個接口ZipCodeList其中類ZipCodeListImpl實現。

其中之一,該ZipCodeServer接口需要的功能是現在

public void initialise(ZipCodeList newlist) throws RemoteException; 

,你可以想像,當我嘗試在ZipCodeListImpl傳遞給initialise功能能正常工作。

但是當我嘗試通過反射來做到這一點(語法是不正確的,但基本上我傳遞只在類ZipCodeListImpl數組):

aZipCodeServer.getClass().getMethod("initialise", [aZipCodeListImpl.getClass()]); 

我得到的錯誤:

java.lang.NoSuchMethodException: ZipCodeServerImpl.initialise(ZipCodeListImpl) 

當然是因爲函數期望ZipCodeList參數。

事情是,這段代碼必須是通用的,所以我有參數列表和函數名稱,但我必須通過反射找到函數本身。

+1

你爲什麼使用反射? 99.99999999%這意味着你做錯了*,另外0.00000001%的時間有可能是更好的方法。反思不是*泛型*使用泛型是泛型的!如果是注射,請考慮使用Guice。 – 2014-10-02 02:32:35

+1

@jarrod必須有一個更好的副本比... ... – 2014-10-02 02:36:08

+0

@SotiriosDelimanolis - 有,一般的互聯網和本網站! – 2014-10-02 02:37:01

回答

0

我不知道你在這種情況下泛型的意思,但因爲參數類型是ZipCodeList,你需要使用Class對象作爲參數傳遞給getMethod。如果你沒有它,你可以遞歸地遍歷子類的類/接口層次結構,試着去嘗試每一個。

0

使用java.beans.Expression:

new Expression(server, "initialise", new Object[] { list }).execute(); 

這應該處理的原始 - 對 - 包裝裝箱/拆箱形式參數和實際參數之間的關係亞型,以及。但它不會處理原始拓寬:請參閱this bug report