JFace数据绑定不支持默认方法

时间:2015-04-02 05:40:59

标签: java eclipse-plugin jface

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;超出了我交换插件的能力。

1 个答案:

答案 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()

的property-name-split-code