我设计一个Hibernate的实体的更新前的事件监听器与Java状态和参数名称。此类将参数名称映射到相应的一对旧状态和新状态,并进行延迟评估布尔型hasChanged并通过公共方法查询通过键(其类型为字符串)的地图。Retrive私有类成员的名字
问题是:我需要从实体一个如果特定属性来检查,说,这是一个名为VAR,都会有它的状态被更新事件改变。当然,这是可以做到这样的:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified("var") {
/* do stuff... */
}
}
我知道我不能总是拯救世界,但如果有人发生了改变,变种名灾难在一个,那么上面的代码将被打破,因为重构工具,甚至更聪明也不会看到字符串“变种”是指代表参数的名称VAR(现灾难)。
我接受这种情况没有更好的办法,但我想确保通过反射或其他方式无法获得变量名称。
理想的情况下,这将这样的工作:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified(A.class.var.getName()) { // Magic!
/* do stuff... */
}
}
也许在注释处理领域的一些魔法可以进行这样的魔法......
最好的办法是有一个单元测试,确保字段名称使用是正确的。 –
@PeterGelderbloem伟大的建议,我将与单元测试 –