Мне кажется, я где-то читал людей, генерирующих методы equals / hashcode / toString во время компиляции (используя APT), определяя, какие поля должны быть частью теста hash / равенства. Я не мог найти ничего подобного в Интернете (возможно, мне это приснилось?) ...
Это можно сделать так:
public class Person {
@Id @GeneratedValue private Integer id;
@Identity private String firstName, lastName;
@Identity private Date dateOfBirth;
//...
}
Для сущности (поэтому мы хотим исключить некоторые поля, например идентификатор).
Или как класс случая scala, т.е. объект значения:
@ValueObject
public class Color {
private int red, green, blue;
}
Мало того, что файл становится более читабельным и более простым для записи, он также помогает гарантировать, что все атрибуты являются частью хеш-кода equals / hashcode (в случае, если вы добавите другой атрибут позже, без соответствующего обновления методов). *
Я слышал, что APT не очень хорошо поддерживается в IDE, но я не считаю это серьезной проблемой. В конце концов, тесты в основном выполняются серверами непрерывной интеграции.
Есть идеи, если это уже сделано, а если нет, то почему?
Спасибо