如何内省getter和setter具有不同类型的字段?

时间:2017-06-20 15:30:54

标签: java javabeans

我有JAXB生成的Java Beans类,我不想手动更改:

public class Bar
{
  protected Boolean foo;

  public Boolean getFoo() {
     return this.foo;
  }

  public void setFoo(final boolean value) {
     this.foo = value;
  }
}

我正试图以这种方式调查这个类(我需要getter和setter):

  PropertyDescriptor[] propertyDescriptiors =
        Introspector.getBeanInfo(Bar.class, Object.class).getPropertyDescriptors();
  for (PropertyDescriptor descriptor : propertyDescriptiors)
  {
     System.out.println("read method: " + descriptor.getReadMethod());
     System.out.println("write method: " + descriptor.getWriteMethod());
  }

但它没有找到setter。

如果我将getFoo更改为返回原始booleansetFoo以接收Boolean对象,则可以正常使用。

如何在不更改类型的情况下从此类获取getter和setter方法?

1 个答案:

答案 0 :(得分:2)

您不能,检查员无法找到设置者,因为foo类型为Boolean,而不是boolean

您可以使用包装器

public class BarWrapper {
    private Bar bar;

    public Boolean getFoo() {
        return this.bar.getFoo();
    }

    public void setFoo(final Boolean value) {
        this.bar.setFoo(value);
    }
}

然后检查包装器

Introspector.getBeanInfo(BarWrapper.class, Object.class).getPropertyDescriptors();