大家好日子。我正在使用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)
来解析setter和getter来创建属性映射。但是,不是解析Integer getId()
,而是java.lang.Object getId()
。据我所知,Introspector无法理解以SomeHavingId<Integer>
方式实现的接口。
这就是我的问题 - 如果出现以下情况,我应该怎样做才能获得正确的方法签名:
答案 0 :(得分:1)
不幸的是,问题仍然可以在JRE7中发生,但不可重现。它取决于方法“Method [] java.lang.Class.getMethods()”返回的方法的顺序,如果结果是否正确。
此方法的javadoc说“...返回的数组中的元素没有排序,并且没有按任何特定的顺序排列......”但是introspector使用顺序来创建属性描述符。因此,可能会返回错误的属性描述符。
我遇到了这个问题,但找不到解决方案,甚至没有一种方法可以重现,因为它不会经常发生。