第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
しとかないとまずいですが…