繁体   English   中英

具有通用实现方法的Introspector getBeanInfo在bean上

[英]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>方式实现的接口。

这就是我的问题-在以下情况下,我应该怎么做才能获得正确的方法签名:

  1. 我无法更改该bean的源代码
  2. 我无法更改Vaadin的源代码

不幸的是,问题仍然可以在JRE7中发生,但无法重现。 如果结果正确与否,则取决于方法“ Method [] java.lang.Class.getMethods()”返回的方法的顺序。

此方法的javadoc说:“ ...返回的数组中的元素未排序,并且没有任何特定的顺序...”,但是内省者使用该顺序来创建属性描述符。 因此,可能会返回错误的属性描述符。

我遇到了这个问题,但是找不到解决方案,甚至找不到重现的方法,因为这种情况很少发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM