假设我有一个布尔属性,该布尔属性应表示特定路径中是否存在特定文件的事实。
这是一些代码:
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
用作其类型,从而无需为每种类型使用单独的类。