2
在方法內部使用匿名內部類時,當我們想要在匿名內部類中使用方法參數時,我們必須將其標記爲final。 這裏的一些細節: Why do we use final keyword with anonymous inner classes?實例屬性的匿名內部類聲明,使用另一個實例屬性
但是,當使用類屬性而不是方法本地屬性會發生什麼?
簡單的用例:用番石榴功能的春季服務:
protected LovValueDAO lovValueDAO;
private final Function<String,LovValue> LOV_ID_TO_LOV = new Function<String,LovValue>() {
@Override
public LovValue apply(String input) {
return lovValueDAO.findById(input);
}
};
@Required
public void setLovValueDAO(LovValueDAO lovValueDAO) {
this.lovValueDAO = lovValueDAO;
}
它是安全的聲明這樣的番石榴功能? 根據我的測試,它工作正常,但發動機罩後面發生了什麼?
初始化順序是:
- 功能被初始化
- lovValueDAO被彈簧通過 設定器注入
因此我想,因爲函數首先被初始化,即lovValueDAO在函數內使用的屬性不會是引用的副本,而是引用本身,因爲一旦DAO被真正注入,它就可以正常工作。
我正確嗎?
如果我使用此代碼發生什麼:
private final Function<String,LovValue> LOV_ID_TO_LOV = new Function<String,LovValue>() {
@Override
public LovValue apply(String input) {
return lovValueDAO = null;
}
};
會後,我調用函數我外面屬性protected LovValueDAO lovValueDAO;
被設置爲空?