java - JFace 数据绑定(bind)不支持默认方法

标签 java eclipse-plugin jface

Java 8 中有一个令人惊讶的新特性:接口(interface)上的默认方法。事实上,令人惊讶的是,甚至 JDK 自己的 bean Introspector does not support它。由于 Java 8 是全新的,仅发布了一年左右,因此可以肯定地认为它不会很快得到修复。

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

一些细节:错误报告的界面:

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)

我们确实使用数据绑定(bind) 1.4.0,这是下载站点甚至为 Eclipse 4.4.2 提供的版本,我在某处看到了 1.4.2 版本,但经过一些无果的尝试后,我开始相信更换插件超出了我的能力。

最佳答案

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

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

关于java - JFace 数据绑定(bind)不支持默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29405738/

相关文章:

java - HashMap 或哈希表中的重新哈希过程

java - eclipse插件开发中如何对字符串进行着色

java - TreeViewer setSelectionProvider 仅适用于一个控件

java - NetBeans RCP 查找与 Eclipse RCP X 有何类比?

eclipse - Eclipse 编辑器中的标记未显示消息

java - JMockIt 失败,出现 AgentInitializationException : Agent JAR loaded but agent failed to initialize

java - 如何在 ScrolledForm 中禁用滚动条?

java - 将两点创建的面积扩大其距离的百分比

java - Selenium TestNG 不同维度的相同测试

java - jdbc 使用自增字段向数据库中插入数据