2010-12-09 85 views
8

我正在將一些python代碼轉換爲java,並且有一種情況需要調用對象的方法,但直到運行時才知道哪些方法。在python中,我通過在我的對象上使用getattr並將它傳遞給我的方法名稱的字符串來解決此問題。你如何在Java中做類似的事情?相當於python的getattr的Java?

回答

11

Class.getField是你的朋友。這可能是因爲,雖然Python是動態類型和Java是靜態類型不會很簡單

編輯(除非你知道你的類型的字段提前。):如何這些例子翻譯。 http://effbot.org/zone/python-getattr.htm

屬性查找

的Python

//normal 
value = obj.attribute 

//runtime 
value = getattr(obj, "attribute") 

的Java

//normal 
value = obj.attribute; 

//runtime 
value = obj.getClass().getField("attribute").get(obj); 


方法調用

的Python

//normal 
result = obj.method(args) 

//runtime 
func = getattr(obj, "method") 
result = func(args) 

的Java

//normal 
result = obj.method(args); 

//runtime 
Method func = obj.getClass().getMethod("method", Object[].class); 
result = func.invoke(obj, args); 

在簡單的情況下,你需要知道你是否有一個字段或方法。尤其是因爲它們可以具有相同的名稱。另外方法可能被重載,所以你需要知道你想要的方法簽名。

如果你不關心你哪種方法或字段,你可以很容易實現這個作爲一個輔助方法。

+0

Field.get()返回任何數據類型的Object。它沒有被靜態檢查。 – 2010-12-09 13:01:17

0

在Java中這樣做與反射API(它通常是相當麻煩的)。

MethodUtils在Apache Commons中BeanUtils項目可能使它更容易處理,儘管它對於像這樣簡單的東西來說是相當大的依賴。