我正在编写一个JFace对话框,我想使用数据绑定到模型对象.
查看代码我可以看到有时我发现PojoProperties用于构建绑定,而有时则使用它PojoObservables.
看着Javadoc,我可以读到:
PojoObservables:一个工厂,用于为POJO(普通的旧Java对象)创建可观察对象,这些对象符合具有getter和setter的对象的想法,但不会在更改时提供属性更改事件.
PojoProperties:一个工厂,用于为POJO(普通旧Java对象)创建属性,这些属性符合具有getter和setter的对象的想法,但不会在更改时提供属性更改事件.
同样的问题适用于BeansObservables和BeansProperties之间存在的差异
(显而易见的)差异是因为observable允许观察对象而属性允许观察属性,但由于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;
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
BINDING(相关部分):
// using PojoObservable
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, …Run Code Online (Sandbox Code Playgroud) 想象一下有一个java类
public class FixedClassOfStrings {
List<String> myMember=new ArrayList<String>();
// omissed all non relevant code...
public Class getMyType() {
return String.class;
}
}
Run Code Online (Sandbox Code Playgroud)
如何通过使用 java 泛型使其参数化?
我的尝试失败了:
public class GenericClass<T> {
List<T> myMember=new ArrayList<T>();
public Class getMyType() {
return T.class; // this gives "Illegal class literal for the type parameter T"
}
}
Run Code Online (Sandbox Code Playgroud)
另外,如何避免在 FixedClassOsStrings 中发出警告:“类是原始类型。对泛型类的引用应该参数化”?可以声明:
public Class<String> getMyType() {
return String.class;
}
...
Run Code Online (Sandbox Code Playgroud)
如果没问题,我应该使用泛型返回什么?
public Class<T> getMyType() {
return T.class; // this gives "Illegal class literal for the type parameter …Run Code Online (Sandbox Code Playgroud)