嗯,我有一個最終屬性,但我不想在創建對象時初始化它,因爲我不能。於是,我就不能初始化它在我的構造函數,但使用二傳手,我猜它會一直像一個只,一次性使用的二傳手,但我有此錯誤:在對象實例化後初始化最終屬性
Test.java:27: error: cannot assign a value to final variable foo
this.foo = new String(foo);
這裏是一個短我用來測試這個代碼:
class Test {
private final String foo;
public static void main(String[] args) {
Test test = new Test();
test.setFoo("gygygy");
System.out.println(test.getFoo());
}
public Test() {
System.out.println("Constructor");
}
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
}
所以我假設構造函數隱式地使this.foo = new String();或this.foo = null;我認爲我無法修改這種行爲,但我怎麼能等同於我想要做的?我認爲是這樣的:
private String foo;
/* ... */
public void setFoo(String foo) {
if(!(this.foo.isInitialized()))
this.foo = foo;
}
但Object.isInitialized()方法顯然不存在,我無法找到一個相當於X)
因此,這裏是我的幾句話的問題:我能怎麼做 ?我想要一個最終屬性即未在對象的實例化處初始化。
謝謝!
那麼我會簡單地使用布爾的解決方案,謝謝!我不知道建造者模式。我想我理解它是如何工作的,但我更喜歡第一種解決方案,它將以更快,更簡單的方式用於單個屬性:p – Thiht 2012-07-22 16:51:41