Я разрабатываю объект Hibernate Pre-Update Event Listener с Java 8.
Я создал класс StateTracker, который из PreUpdateEvent получает новое и старое состояние объекта и имя параметра. Этот класс сопоставляет имена параметров с соответствующей парой старых и новых состояний и отложенным вычислением Boolean hasChanged и выполняет запрос карты по ключу (который имеет тип Строка), доступная через общедоступный метод.
Проблема в следующем: мне нужно проверить, изменится ли состояние определенного свойства объекта A, скажем, с именем var, в результате события обновления. Естественно это можно сделать так:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified("var") {
/* do stuff... */
}
}
Я знаю, что не всегда могу спасти мир, но если кто-то изменит имя var на катастрофа в A , то приведенный выше код будет сломан, потому что даже самые умные из инструментов рефакторинга не увидят, что String "var" предназначена для представления имени параметра var (теперь катастрофа).
Я согласен с тем, что нет лучшего выхода из этой ситуации, но я хочу быть уверен, что это не способ получить имя переменной через отражение или что-то в этом роде.
В идеале это должно работать так:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified(A.class.var.getName()) { // Magic!
/* do stuff... */
}
}
Может быть, какое-то волшебство в области обработки аннотаций могло бы сотворить такое волшебство...