java - 如何从 ObservableValue 继承?
问题描述
我有一个包含各种属性的类:
public class Foo extends ??? {
public SimpleBooleanProperty prop1 = new SimpleBooleanProperty();
public SimpleStringProperty prop2 = new SimpleStringProperty();
// ** more properties ** //
}
在大多数情况下,所有属性都会更改,对于某些侦听器来说,当任何属性更改时只调用一个回调然后获取所有属性的值(即使不是所有属性都更改)会容易得多。我应该建立在什么类上?
我想用类似的东西注册一个听众
Foo foo = new Foo();
foo.addListener( new ChangeListener< >() {
void onChange(Foo newValue,Foo oldValue) {
System.out.println(String.valueOf(newValue.prop1.get());
System.out.println(String.valueOf(newValue.prop2.get());
});
打印到控制台只是一个例子,重点是监听器只需要知道发生了什么变化,调用 getter 就可以了。我有点迷失从哪里开始。有Observable
接口和大量不同的基类(例如ObservableValueBase<T>
or SimpleObjectProperty<T>
)。我应该继承/扩展哪一个?
解决方案
不完全确定我是否正确解释了您的需要。这可能是您需要的:
public class Foo extends ??? {
public SimpleBooleanProperty prop1 = new SimpleBooleanProperty();
public SimpleStringProperty prop2 = new SimpleStringProperty();
// ** more properties ** //
private final ObjectBinding<Void> binding = Bindings.createObjectBinding(this::bar, prop1, prop2, prop3, prop4);
private final Void bar() {
Optional.of(newValue.prop1.get()).ifPresent(System.out::println);
Optional.of(newValue.prop2.get()).ifPresent(System.out::println);
Optional.of(newValue.prop3.get()).ifPresent(System.out::println);
Optional.of(newValue.prop4.get()).ifPresent(System.out::println);
return null;
}
}
绑定本身会为您进行侦听,但您必须保留绑定的强引用,否则它将被垃圾收集。
推荐阅读
- chatbot - Botium 核心 - 频繁测试失败并显示消息“AllInstitutions_3/Line 7: error sent to bot Error”
- php - 我的 sql 插入查询没有错误,但没有向数据库中插入任何内容
- react-native - ScrollView 中包裹的多个 FlatList
- scala - 将列表的 spark DF 列拆分为单独的列
- python - 根据 xy 坐标计算行和列,TypeError: 'float' object is not subscriptable
- spring-boot - 来自 Google Kubernetes Engine 的邮件
- spring-boot - @Value("${server.address}") 返回 null
- amazon-cloudformation - 我们可以在 cloudformation 模板中添加任何带有 !Ref 的字符串吗?
- ansible - 在ansible中如何禁用单个任务的弃用警告?
- python - 获得单行代码执行时间的最佳方法是什么?