Я писал toString() для класса в Java на днях, вручную выписав каждый элемент класса в String, и мне пришло в голову, что при использовании отражения может быть возможно создать общий метод toString() которые могут работать на ВСЕХ классах. И.Е. он будет определять имена полей и значения и отправлять их в строку.
Получение названий полей довольно просто, вот что посоветовал сотрудник:
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;
}
Используя factory, я мог бы снизить накладные расходы на производительность, сохраняя поля один раз, при первом вызове toString(). Однако найти значения может быть намного дороже.
Из-за производительности отражения это может быть скорее гипотетическим, чем практическим. Но меня интересует идея размышления и как я могу использовать его для улучшения моего повседневного программирования.