На днях я писал toString () для класса на Java, вручную записывая каждый элемент класса в String, и мне пришло в голову, что с помощью отражения можно было бы создать общий метод toString (), который мог бы работать на ВСЕ классы. I.E. он определит имена и значения полей и отправит их в строку.
Получить имена полей довольно просто, вот что придумал коллега:
public static List initFieldArray(String className) throws ClassNotFoundException {
Class c = Class.forName(className);
Field field[] = c.getFields();
List<String> classFields = new ArrayList(field.length);
for (int i = 0; i < field.length; i++) {
String cf = field[i].toString();
classFields.add(cf.substring(cf.lastIndexOf(".") + 1));
}
return classFields;
}
Используя фабрику, я мог уменьшить накладные расходы на производительность, сохранив поля один раз, при первом вызове toString (). Однако поиск значений может быть намного дороже.
Из-за характеристик отражения это может быть скорее гипотетическим, чем практическим. Но меня интересует идея рефлексии и то, как я могу использовать ее для улучшения своего повседневного программирования.