我正在编写一个 JFace 对话框,并且我想对模型对象使用数据。
查看代码我可以看到有时我发现一个PojoProperties
用于构建绑定,而其他时候它被用于一个PojoObservables
.
查看Javadoc,我可以阅读:
PojoObservables:为 POJO(普通的旧 java 对象)创建可观察对象的工厂,符合带有 getter 和 setter 的对象的概念,但不提供更改时的属性更改事件。
PojoProperties:为 POJO(普通的旧 Java 对象)创建属性的工厂,符合具有 getter 和 setter 的对象的概念,但不提供更改时的属性更改事件。
同样的问题适用于BeansObservables和BeansProperties之间存在的差异
(明显的)区别似乎是 observable 允许观察对象,而 properties 允许观察属性,但是由于 Pojo 的数据有一个 getter 和一个 setter,它们之间有什么区别?我应该为我的对话选择哪一个?
下面是一段代码摘录:
POJO:
public class DataObject {
private String m_value;
public String getValue() {
return m_value;
}
public void setValue(String i_value) {
m_value = i_value;
}
}
DIALOG(相关部分):
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
m_combo = new Combo(container, SWT.BORDER);
m_comboViewer = new ComboViewer(container, SWT.NONE);
}
BINDING(相关部分):
// using PojoObservable
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = SWTObservables.observeSelection(m_combo);
// using PojoProperties
IObservableValue observeValue = PojoProperties.value("value").observe(m_dataObject);
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);
我知道有一次我使用的是组合,而另一次我使用的是ComboViewer
,但是如果需要,我可以从查看器中获取组合并以另一种方式绑定...
另外,我可以将两者混合使用吗,例如将observeValue
与 一起使用ViewerProperties
?
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);