第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
オブジェクトを生成しなければいけないんでしょう?