1

特定のパス内の特定のファイルが存在するかどうかを表すブール型プロパティがあるとします。

ここにいくつかのコードがあります:

class SomeClass {

protected static final File FILE_TO_TEST = new File("test.canc.me");

//My javafx property
public ReadOnlyBooleanPropertyBase fileExistingProperty = new ReadOnlyBooleanPropertyBase() {

    @Override public boolean get() {
        return FILE_TO_TEST.exists();
    }

    @Override public Object getBean() { return null; }

    @Override public String getName() { return ""; }

};

//old style property property 
public boolean isFileExisting() {
    return fileExistingProperty.get();
}

Ok。実際には、このプロパティは設定できないため読み取り専用であり、その値は、アプリケーション ホームに存在するファイルによって表される「外部」条件に依存します。
それでも、プロパティを更新する必要があります。つまり、ファイルがまだ存在するかどうかをもう一度確認し、それに応じて変更イベントと無効化イベントを発生させます。
プロパティ クラスに更新メソッドを簡単に追加できますが、それを呼び出すには、無名クラスだけでなく内部クラスを作成する必要があります。
そして、ブール値、文字列、整数など、さまざまな種類の読み取り専用でありながら更新可能なプロパティごとに匿名クラスが必要になります。
問題は、これを達成するためのより便利な方法はありますか?

4

1 に答える 1

0

匿名クラスだけでなく、内部クラスを作成する必要があります。

匿名の内部クラスを大量に作成しようとするのではなく、このアプローチを採用します。

そして、ブール値、文字列、整数など、読み取り専用でまだ更新可能なプロパティの異なるタイプごとに匿名クラスが必要になります。

ジェネリックを使用してください - それは彼らが設計されているものです! を作成するReadOnlyRefreshableProperty<T>と、関連するメソッドの戻り値の型とパラメーターがすべて型として使用Tされるため、型ごとに個別のクラスを作成する必要がなくなります。

于 2013-06-05T14:41:33.313 に答える