[英]Default method in interface in Java 8 and Bean Info Introspector
[英]Introspector getBeanInfo on bean with generic implemented method
今天是個好日子。 我正在使用Vaadin,BeanItemContainer出現問題。 我有一個通用接口和一個實現該接口的bean
package ru.package.testpackage;
public class SomeTest {
interface SomeHavingId<T> {
T getId();
void setId(T id);
}
class TestBean implements SomeHavingId<Integer> {
public TestBean(Integer id) {
this.id = id;
}
@Override
public Integer getId() {
return id;
}
@Override
public void setId(Integer id) {
this.id = id;
}
private Integer id;
}
}
問題是BeanItemContainer
中的Vaadin使用Introspector.getBeanInfo(TestBean.class)
解析設置程序和獲取程序以創建屬性映射。 但是,而不是解析一個Integer getId()
我得到了java.lang.Object getId()
。 據我所知,Introspector無法理解以SomeHavingId<Integer>
方式實現的接口。
這就是我的問題-在以下情況下,我應該怎么做才能獲得正確的方法簽名:
不幸的是,問題仍然可以在JRE7中發生,但無法重現。 如果結果正確與否,則取決於方法“ Method [] java.lang.Class.getMethods()”返回的方法的順序。
此方法的javadoc說:“ ...返回的數組中的元素未排序,並且沒有任何特定的順序...”,但是內省者使用該順序來創建屬性描述符。 因此,可能會返回錯誤的屬性描述符。
我遇到了這個問題,但是找不到解決方案,甚至找不到重現的方法,因為這種情況很少發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.