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

Java JFace数据绑定不支持默认方法,java,eclipse-plugin,jface,Java,Eclipse Plugin,Jface,Java8中有一个令人惊讶的新特性:接口上的默认方法。令人惊讶的是,即使是JDK自己的bean也能做到这一点。由于Java8是全新的,只发布了一年左右,所以我们可以放心地认为它不会很快得到修复 所有这些都意味着JFace数据绑定也不可能支持默认方法,正如您所想象的,这是一个问题。我们已经有了一个自己的instrostect,但是有人知道我们如何扩展/修复/修补数据绑定以使用它而不是不工作的默认绑定吗 一些细节:对于bug报告的界面: public static interface Named {

Java8中有一个令人惊讶的新特性:接口上的默认方法。令人惊讶的是,即使是JDK自己的bean也能做到这一点。由于Java8是全新的,只发布了一年左右,所以我们可以放心地认为它不会很快得到修复

所有这些都意味着JFace数据绑定也不可能支持默认方法,正如您所想象的,这是一个问题。我们已经有了一个自己的instrostect,但是有人知道我们如何扩展/修复/修补数据绑定以使用它而不是不工作的默认绑定吗

一些细节:对于bug报告的界面:

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)

我们确实使用了databinding 1.4.0,这是下载站点为Eclipse4.4.2提供的版本,我在某处看到了1.4.2版本,但经过一些徒劳的尝试后,我开始相信交换插件超出了我的能力。

在指定如下接口类型时,我能够绑定到默认方法支持的属性:

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

的属性名称拆分代码。您能否澄清您是否确实尝试绑定默认方法,或者您是否假设它不起作用?@Rüdigermann如果您使用
PojoObservables.observeValue(object,“name”)
即使在最新的JFace版本中,它也使用默认的Java内省器。因此它不可能工作。我可以成功地绑定
PojoProperties.value(Pojo.class,“defaultMethod”).observe(dataBindingContext.getValidationRealm(),Pojo)
其中Pojo.class是与
set/getDefaultMethod()的接口
-不完全确定与
PojoObservables.observeValue()的差异在哪里
谎言。如果这对您来说不是一个可行的解决方案-您是否考虑过替换
PojoProperties.value
?这就是observeValue调用结束的地方,并且获得了
PropertyDescriptor
。如果运气好的话,您可以使用自己的
PropertyDescriptor
派生实现。@Rüdigermann它没有不要使用
PojoProperties.value(…).observe(…)
或者使用
org.eclipse.core.databinding
1.4.0,这是下载站点甚至为Eclipse4.4.2提供的版本(当然我们没有使用)。也许这就是为什么这对我不起作用的原因:我们有bean,它可能继承接口的方法,也可能不继承接口的方法,所以我们只能绑定bean类。但是还有很多其他框架也不支持这一点,所以我们想我们不得不痛苦地改变bean来覆盖接口方法(呼叫超级)直到每个人都这么做。