美好的一天每個人。我正在使用Vaadin,並在BeanItemContainer中遇到了問題。我有一個通用的接口,並實現該接口Introspector getBeanInfo 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;
}
}
的問題是,Vaadin內BeanItemContainer
使用Introspector.getBeanInfo(TestBean.class)
解析getter和setter方法來創建屬性映射的bean。但不是解決Integer getId()
我得到java.lang.Object getId()
。就我所見,Introspector無法理解以SomeHavingId<Integer>
方式實現的接口。
所以這是我的問題 - 我應該怎麼做才能正確的方法簽名,如果:
- 我不能改變這個bean的源代碼
- 我不能改變Vaadin 的源代碼
您使用哪個Java版本?因爲您可以更改BeanInspector的源代碼。我建議使用JRE7。有兩對get/set,一個用於Integer,另一個用於Object,由通用接口引起(你從來不會在Java中看到第二個字符,但是在字節碼和反射中)。使用JRE7時,應該通過更好地決定哪個get/set對使用來解決問題。 –
由於目標平臺限制,我正在使用JRE1.5。我希望我能跳上JRE7。 – fsmorygo