嗯,我有一个最终属性,但我不想在创建对象时初始化它,因为我不能。于是,我就不能初始化它在我的构造函数,但使用二传手,我猜它会一直像一个只,一次性使用的二传手,但我有此错误:在对象实例化后初始化最终属性
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