首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaBeans Introspector没有正确找到具有接口层次结构类型的属性

JavaBeans Introspector没有正确找到具有接口层次结构类型的属性
EN

Stack Overflow用户
提问于 2010-12-14 11:48:44
回答 1查看 2.5K关注 0票数 1

我读过JavaBeans规范,但没有发现这种行为。是虫子吗?

  • testPropertyType失败是因为期望Data class
  • testPropertyReadable成功,因为DefaultBean.getMyData returning Data方法exists
  • testPropertyWritable失败是因为DefaultBean.setMyData(Data)方法不存在

在JavaSE 6上测试

代码语言:javascript
复制
import java.beans.BeanInfo;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import org.junit.Test; 

public class DefaultBeanTest {

    @Test
    public void testPropertyType()
        throws Exception
    {
        final BeanInfo beanInfo = Introspector.getBeanInfo(DefaultBean.class);
        for (final PropertyDescriptor property : beanInfo.getPropertyDescriptors()) {
            if ("class".equals(property.getName())) {
                continue;
            }

            if ("myData".equals(property.getName())) {
                if (!property.getPropertyType().equals(ModifiableData.class)) {
                    throw new AssertionError("expects " + ModifiableData.class + " but was "
                            + property.getPropertyType());
                }
            }
        }
    }


    @Test
    public void testPropertyReadable()
        throws Exception
    {
        final BeanInfo beanInfo = Introspector.getBeanInfo(DefaultBean.class);
        for (final PropertyDescriptor property : beanInfo.getPropertyDescriptors()) {
            if ("class".equals(property.getName())) {
                continue;
            }

            if ("myData".equals(property.getName())) {
                if (property.getReadMethod() == null) {
                    throw new AssertionError("expects read method");
                }
            }
        }
    }


    @Test
    public void testPropertyWritable()
        throws Exception
    {
        final BeanInfo beanInfo = Introspector.getBeanInfo(DefaultBean.class);
        for (final PropertyDescriptor property : beanInfo.getPropertyDescriptors()) {
            if ("class".equals(property.getName())) {
                continue;
            }

            if ("myData".equals(property.getName())) {
                if (property.getWriteMethod() == null) {
                    throw new AssertionError("expects write method");
                }
            }
        }
    }


    static interface Data {

    }

    static interface ModifiableData
            extends Data {
    }

    static class DefaultData
            implements ModifiableData {

    }

    static interface Bean {

        Data getMyData();

    }

    static interface ModifiableBean
            extends Bean {

        ModifiableData getMyData();


        void setMyData(
                ModifiableData data);
    }

    static class DefaultBean
            implements ModifiableBean {

        @Override
        public ModifiableData getMyData()
        {
            return this.data;
        }


        @Override
        public void setMyData(
                final ModifiableData data)
        {
            this.data = data;
        }


        private ModifiableData data;

    }

}
EN

回答 1

Stack Overflow用户

发布于 2010-12-16 11:34:10

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6852569

好消息是Java 7

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4438815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档