CUBは子供の白熊

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

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

問題

チャートやテーブルといった多くの JavaFX プロパティを持つクラスでは、ほとんどのプロパティにリスナーが登録されない可能性が高い
従って、プロパティごとにプロパティオブジェクトを持つのは無駄である

最初は普通のフィールドを使用してプロパティ値を保持し、初めてxxxProperty()メソッドが呼び出されたときにプロパティオブジェクトを使用するようにせよ

解答

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

■ 遅延作成しない例

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

■ 遅延作成

public class Greeting {
    private String text = "";
    private StringProperty textProp = null;
    
    public final StringProperty textProperty() {
        if (textProp == null) {
            textProp = new SimpleStringProperty(text);
            text = null;
        }
        return textProp;
    }
    public final void setText(String newValue) {
        if (textProp != null) {
            textProp.set(newValue);
        } else {
            text = newValue;
        }
    }
    public final String getText() {
        return textProp != null ? textProp.get(): text;
    }
}

実際にはsynchronizedしとかないとまずいですが…