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();
}

好的。事实上,这个属性是只读的,因为它不能被设置,它的值取决于文件所代表的“外部”条件,该文件是否存在于应用程序主目录中。
然而,我需要刷新属性,即再次查看文件是否仍然存在,并相应地引发更改和失效事件。
我可以轻松地向属性类添加一个刷新方法,但为了调用它,我必须创建一个内部类,而不仅仅是一个匿名类。
而且我需要一个匿名类来处理每种不同类型的只读但可刷新属性,即布尔值、字符串、整数等
。问题是:有没有更方便的方法来实现这一点?

4

1 回答 1

0

我将不得不创建一个内部类,而不仅仅是一个匿名类。

我会采用这种方法,而不是尝试创建一堆匿名内部类。

对于每种不同类型的只读但可刷新属性,我需要一个匿名类,即布尔值、字符串、整数等。

使用泛型——这就是它们的设计目的!创建一个ReadOnlyRefreshableProperty<T>,然后相关方法的返回类型和参数都T用作它们的类型,无需为每种类型创建单独的类。

于 2013-06-05T14:41:33.313 回答