假设我有一个布尔属性,该布尔属性应表示特定路径中是​​否存在特定文件的事实。

这是一些代码:

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


好。事实是,由于无法设置此属性,因此它是只读的,其值取决于应用程序主目录中存在的文件所代表的“外部”条件。
但是,我需要刷新该属性,即再次查看该文件是否仍然存在,并相应地引发更改和失效事件。
我可以轻松地向属性类添加刷新方法,但是要调用它,我必须创建一个内部类,而不仅仅是一个匿名类。
对于每种不同类型的readable-only-refreshable属性,我将需要一个匿名类,即boolean,String,Integer等。
问题是:是否有更方便的方法来完成此操作?

最佳答案

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


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


  对于每种不同类型的readable-only-refreshable属性,我将需要一个匿名类,即boolean,String,Integer等。


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

10-06 06:34