Java 8中有一個令人驚訝的新功能:接口上的默認方法。實際上令人驚訝的是,即使是JDK自己的豆子Introspector does not support也是如此。而且由於Java 8是全新的,僅僅被髮布了一年左右,所以假設它很快就不會被修復是安全的。JFace數據綁定不支持默認方法
所有這些意味着JFace Databinding無法支持默認方法,這是一個問題,正如您可以想象的那樣。我們已經有了一個自己的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版本,但是在一些沒有結果的嘗試之後,我開始相信這超出了我交換插件的能力。
的屬性名稱系分割的代碼,你能否澄清,如果你真的想綁定一個默認的方法或者如果你認爲它不起作用? – 2015-04-02 06:44:54
@RüdigerHerrmann如果使用'PojoObservables.observeValue(object,「name」)綁定,它將使用默認的Java Introspector,即使在最新的JFace版本中也是如此。所以沒有辦法讓它工作。 – 2015-04-02 07:03:36
我可以用'PojoProperties.value(Pojo.class,「defaultMethod」).observe(dataBindingContext.getValidationRealm(),pojo)''成功綁定,其中Pojo.class是'set/getDefaultMethod()'的接口 - 不完全確定與PojoObservables.observeValue()不同的地方在哪裏。如果這對你來說不是一個可行的方案 - 你有沒有考慮過替換'PojoProperties.value'?這是observeValue的調用結束並獲得「PropertyDescriptor」的地方。運氣好的話,你可以使用你自己的'PropertyDescriptor'派生的實現。 – 2015-04-02 08:52:11