さて、私は最終的なプロパティを持っていますが、オブジェクトを作成するときにそれを初期化したくありません。そのため、コンストラクターで初期化しないようにしましたが、セッターを使用して、一度だけ使用できるセッターのようなものだったと思いましたが、次のエラーが発生しました:
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)
だからここに私の質問があります:どうすればいいですか?オブジェクトのインスタンス化時に初期化されない最終属性が必要です。
ありがとう !