クラスの情報を取得する際にIntrospectorのgetBeanInfoを使うと思うのだけど、
その際、気をつけないといけないことがある。
PropertyDescriptorクラスはプロパティ情報を格納している。その中にプロパティに対するgetterやsetter情報も格納しているのだけども、
収集する際にgetterとsetterは同じクラスを扱っていないとペアとはみなされないということ。
たとえば、setterが実装クラスを格納し、getterではそのスーパークラス、インターフェースを返すようなgetter、setterはペアとは判断されない。
以下検証ソース、setterはnullが格納されている。また、setterはIntrospector#getBeanInfoでは収集されていない。
public class IntrospectorTest {
public static void main(String[] args) throws Exception {
PropertyDescriptor pd = Introspector.getBeanInfo(
PropertyDescriptorTest.class).getPropertyDescriptors()[1];
System.out.println("getter: " + pd.getReadMethod());
System.out.println("setter: " + pd.getWriteMethod());
}
}
class PropertyDescriptorTest {
impl property;
public spec getProperty() {
return this.property;
}
public void setProperty(impl property) {
this.property = property;
}
}
class spec {}
class impl extends spec {}
実行結果:
getter: public spec PropertyDescriptorTest.getProperty()
setter: null
0 件のコメント:
コメントを投稿