好吧,我有一个最终属性,但我不想在创建对象时初始化它,因为我做不到。所以我试图不在我的构造函数中初始化它,而是使用一个setter,我猜它会像一个只有一次可用的setter,但我有这个错误:
Test.java:27:错误:无法为最终变量 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)
所以这里是我的几句话的问题:我该怎么办?我想要一个在对象实例化时未初始化的最终属性。
谢谢 !