我正在將一些python代碼轉換爲java,並且有一種情況需要調用對象的方法,但直到運行時才知道哪些方法。在python中,我通過在我的對象上使用getattr並將它傳遞給我的方法名稱的字符串來解決此問題。你如何在Java中做類似的事情?相當於python的getattr的Java?
8
A
回答
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
你可以開始here瞭解Java反射。
0
您可以使用java reflection,但沒有完全等效的getattr
。
0
在Java中這樣做與反射API(它通常是相當麻煩的)。
MethodUtils
在Apache Commons中BeanUtils項目可能使它更容易處理,儘管它對於像這樣簡單的東西來說是相當大的依賴。
0
您應該使用Reflection API。由於純API有點...無法接近,你應該看看像commons beanutils或reflections這樣的助手。
相關問題
- 1. 什麼是python的getattr的紅寶石相當於
- 2. python相當於java的OutputStream?
- 3. Java:相當於Python的str.format()
- 4. 相當於Java Python的json.dumps
- 5. Python的toordinal()相當於Java?
- 6. Java相當於Python字典
- 7. python相當於java Matcher.quoteReplacement()
- 8. 相當於Java的Class.getResource的Python
- 9. 相當於Java的BitSet的Python
- 10. 相當於Java的JNLP Web Start的Python?
- 11. Java的的printStackTrace(),相當於在python
- 12. Python的相當於Java的Set.add()?
- 13. 相當於python的String lstrip()的Java?
- 14. 是否有相當於Java的Boost :: Python?
- 15. java的getByte()在python中相當於
- 16. 相當於Python的Java抽象類嗎?
- 17. 相當於Java Python的格式()
- 18. python getattr等同於字典?
- 19. bash相當於Python的os.path.normpath?
- 20. 的Python相當於指針
- 21. 相當於Python的〜/ .bashrc
- 22. 相當於java.io.File的Python
- 23. 的Python相當於在PHP
- 24. Python的枚舉相當於
- 25. C#相當於Python的pdb.set_trace()
- 26. Python中的Mahout相當於
- 27. 相當於Python的! operator
- 28. 相當於Python dis()的Lua?
- 29. 相當於C++的Python strtod
- 30. 相當於Python的[:]在c + +
Field.get()返回任何數據類型的Object。它沒有被靜態檢查。 – 2010-12-09 13:01:17