好的,據我所知,我瞭解這些有關final
變量的內容。針對最終變量的投訴
- 應分配一次
- 所有
final
變量應該在構造函數之前被初始化完成
現在使用上面,我不明白是怎麼以下不工作:
public class FinalTest implements AnotherClass {
private final Something something;
private final otherthing;
@Override
public void setStuff(Something something) {
this.something = something;
this.otherthing = new SomeClass(something);
}
public FinalTest(Something something) {
setStuff(something);
}
}
這裏,在構造函數完成之前final
變量正在設置。那爲什麼編譯器會抱怨呢?
「otherthing」的類型是什麼? – maerics
以下是關於明確分配給您的JLS章節。 http://docs.oracle.com/javase/specs/jls/se7/html/jls-16.html享受。 –
最終變量很好,但有很多次他們沒有意義。如果你沒有辦法在課堂上設置它,那麼它仍然是「邏輯上」的最終選擇,所以不要太強迫它。還要考慮從構造函數(負責完成類的狀態)調用方法(假定您的類處於完成狀態)的有效性。這需要謹慎處理。 –