Java 8中有一个令人惊讶的新功能:接口上的默认方法。实际上令人惊讶的是,即使是JDK自己的bean Introspector does not support也是如此。由于Java 8是全新的,只发布了一年左右,因此可以安全地假设它不会很快得到修复。
所有这些意味着JFace数据绑定也不可能支持默认方法,这是一个问题,正如您可以想象的那样。我们已经拥有了自己的Instrospector,但是有任何人知道我们如何扩展/修复/修补数据绑定以使用它而不是非工作默认值?
一些细节:对于错误报告的界面:
public static interface Named {
public default String getName() {
return "always the same";
}
}
例外情况如下:
java.lang.IllegalArgumentException: name property does not have a read method.
at org.eclipse.core.internal.databinding.beans.BeanPropertyHelper.readProperty(BeanPropertyHelper.java:94)
at org.eclipse.core.internal.databinding.beans.PojoValueProperty.doGetValue(PojoValueProperty.java:47)
at org.eclipse.core.databinding.property.value.ValueProperty.getValue(ValueProperty.java:57)
我们确实使用数据绑定1.4.0,这是下载站点提供的版本,即使对于Eclipse 4.4.2,我在某处看到了版本1.4.2,但经过一些无效的尝试后,我开始相信它&# 39;超出了我交换插件的能力。
答案 0 :(得分:0)
在指定接口类型时,我能够绑定到默认方法支持的属性:
IObservableValue observableValue = PojoProperties.value( Named.class, "name" ).observe( realm, named );
observableValue.setValue( "name" );
如果此方法对您不起作用,您可以自己创建PojoValueProperty
并传入自定义创建的PropertyDescriptor
。
PropertyDescriptor propertyDescriptor = ...
IObservableValue observableValue = new PojoValueProperty( propertyDescriptor, null ).observe( realm, named );
但是你会看到上面的代码访问内部类,你可能想要复制PojoObservables.value()