У меня есть класс Java с ~ 90 полями. Я хочу иметь возможность делать что-то в каждом поле (например, генерировать XML-элемент), не записывая те же 5 строк кода с небольшими заменами 90 раз. В Objective C я думаю, что вы можете получить переменные экземпляра способами, аналогичными доступу к элементам словаря (ObjectForKey). Есть ли что-то подобное в Java, так что я могу получить массив полей, а затем сделать что-то для каждого из них?Enumerate Java Fields
ответ
Да, это называется Reflection API.
В частности, MyClass.class.getDeclaredFields()
будет возвращать полный список полей, объявленных этим классом (see API for details)
Вот другой подход: Используйте Introspector API с JDK для получения боба, как свойства класса. Это полезно, если у вас есть получатели и сеттеры для вашего класса, и вы не хотите напрямую обращаться к частным полям. Получите BeanInfo через Introspector и получите от него все propertyDescriptors. Найти геттер этого свойства.
Я должен признать, что использование этого API немного громоздко и отрадно (предложенный Никитой Рыбаком) более прямолинейно.
Но есть утилита Apache BeanUtils, которая делает все трудолюбие внутренне, поэтому работа с бобами становится простой.
Добавить:
Если вы используете Reflection API, я хотел бы предложить вам аннотировать поля боба или ваши добытчик с аннотациями.
public class MyClassWith90Fields {
@XmlSerialize("name")
private String screenName; // shoudl serialize as <name>...</name>
@XmlSerialize
private String email; // shoud serialize as <email>...</email>
@XmlSerializeIgnore
pirvate boolean flag; // shoud not serialize as annotated as ignore
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @annotation XmlSerialize {
public String value;
}
После этого, ваша генерации кода может проверить (с помощью отражения) аннотированных поля и сериализации их в XML соответствующим образом.
- 1. Java/JSON DateTime Fields
- 2. Regexing fields in java
- 3. enumerate UITableViewCell
- 4. Hubot Slack fields fields
- 5. Swift 2.0: «enumerate» недоступен: вызовите метод «enumerate()» в последовательности
- 6. Enumerate vs Integer in production
- 7. Странное поведение от enumerate()
- 8. Enumerate/iterate строки System.Windows.Forms.DataGrid
- 9. enumerate in python
- 10. file enumerate issue
- 11. Python - index in enumerate
- 12. android enumerate USB-приложение
- 13. enumerate() - генератор в Python
- 14. Asynchronously Enumerate Folders
- 15. Django m2m form fields fields
- 16. Flex 3 sorting fields fields
- 17. SPARQL Query Printing Enumerate Class с JENA JAVA
- 18. Функция «enumerate» прерывает цикл? python3
- 19. Большинство Pythonic for/enumerate loop?
- 20. Enumerate enum-instance with loop
- 21. enumerate() для словаря в python
- 22. Java XML Serializing, Missing fields в файле
- 23. Проблемы с базой данных статистики Fields Fields
- 24. Вкладка jeditable fields и non-jeditable fields
- 25. nhibernate 'virtual' fields
- 26. Изменить \ parskip только внутри enumerate & itemize environment
- 27. Удаление с помощью функции Enumerate пропуском персонажу
- 28. Confused by enumerate() function in tutorials
- 29. Enumerate/Iterate all Views in Activity?
- 30. Создать словарь python по функции enumerate