CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第4章 JavaFX による GUI プログラミング : 問題 3 : JavaFX Property の遅延作成その2

問題

ほとんどがデフォルトから変化しない多くの JavaFX プロパティを持つクラスで、デフォルトではない値に設定されたり、初めてxxxProperty()メソッドが呼び出されたときにプロパティオブジェクトを作成するようにせよ

解答

本文にあったGreetingクラスとTextプロパティを例にする

■ 遅延作成しない例

public class Greeting {
    private StringProperty text = new SimpleStringProperty("Hello");
    
    public final StringProperty textProperty() {
        return text;
    }
    public final void setText(String newValue) {
        text.set(newValue);
    }
    public final String getText() {
        return text.get();
    }
}

■ 遅延作成

private static class Greeting {
    private final String defaultText = "Hello";
    private StringProperty textProp = null;

    public final StringProperty textProperty() {
        if (textProp == null) {
            textProp = new SimpleStringProperty(defaultText);
        }
        return textProp;
    }

    public final void setText(String newValue) {
        if (textProp != null) {
            textProp.set(newValue);
        } else if (!defaultText.equals(newValue)) {
            textProp = new SimpleStringProperty(newValue);
        }
    }

    public final String getText() {
        return textProp != null ? textProp.get(): defaultText;
    }
}

ここでも問題 2と同じでsynchronizedしないといけない

xxxProperty()メソッドは当然としても、デフォルトではない値に設定されたときになぜPropertyオブジェクトを生成しなければいけないんでしょう?