Я конвертирую код python в java и имею ситуацию, когда мне нужно вызывать методы объекта, но не знаю, какие методы до выполнения. В python я разрешаю это, используя getattr на моем объекте и передавая ему строку, которая является именем моего метода. Как бы вы сделали что-то подобное на Java?Java-эквивалент getattr для python?
ответ
Class.getField
- твой друг. Вероятно, это будет не очень просто, так как Python динамически типизируется, а Java статически типизируется (если вы заранее не знаете типы своих полей.)
EDIT: Как перевести эти примеры. 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);
В более простых случаях, вы должны знать, есть ли у вас поле или метод. esp, поскольку они могут иметь одно и то же имя. Кроме того, методы могут быть перегружены, поэтому вам нужно знать, какую подпись метода вы хотите.
Если вам все равно, какой метод или поле вы получите, вы можете реализовать это как вспомогательный метод довольно легко.
Вы можете начать here, чтобы узнать о Java Reflection.
Вы можете использовать java reflection, но нет точного эквивалента getattr
.
В Java вы делаете это с помощью API Reflection (и это обычно довольно громоздко).
MethodUtils
в проекте Apache Commons BeanUtils может сделать его немного легче работать, хотя это довольно тяжелая зависимость для чего-то простого подобного.
Вы должны использовать Reflection API. Поскольку чистый API немного ... неприступен, вы должны посмотреть на помощников, таких как commons beanutils или reflections.
- 1. Python getattr эквивалент для словарей?
- 2. C++ эквивалент Python GetAttr
- 3. getattr для индекса списка в Python?
- 4. Python Chain getattr как строка
- 5. Getattr on package in Python
- 6. Элемент или функция Python getattr()?
- 7. Python combating setattr и getattr
- 8. Python 3,4 GetAttr недопустимый синтаксис
- 9. Flask-SqlAlchemy-Python getattr() speed
- 10. GetAttr Функциональные проблемы (Python 3)
- 11. Вызвать функцию с помощью getattr в Python
- 12. Как переопределить встроенный getattr в Python?
- 13. Альтернативный способ использования getattr в python?
- 14. Что такое ruby-эквивалент getattr python
- 15. объекта Python функции возвращение только с GetAttr
- 16. Вызов метода с getattr в Python
- 17. Python getattr() с другим атрибутом по умолчанию
- 18. using getattr на python прокси xmlrpc
- 19. Python, используя две переменные в getattr?
- 20. Джанго GetAttr() для родственных моделей
- 21. Patton's getattr вызывается дважды?
- 22. Пересылка __getitem__ в getattr
- 23. как вызвать `getattr()` для получения метода Python MySQLCursor?
- 24. Python - Как вы используете getattr для вызова объекта переменной?
- 25. getattr() без объекта класса
- 26. PHP-эквивалент отправки и getattr?
- 27. GetAttr и несколько классов
- 28. Питоны GetAttr в Рубине
- 29. Вызвать метод по функции getattr()
- 30. поведение pyspark getattr()
Field.get() возвращает объект любого типа данных. Он не проверяется статически. – 2010-12-09 13:01:17