我設計一個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偉大的建議,我將與單元測試 –