簡體   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