我使用Java Introspector编写了一个方法,但是我发现当setter / getter方法是静态的时它不起作用!
public class Bean {
public static String foo;
public String bar;
public static String fooBar;
public static String getFoo() {
return foo;
}
public static void setFoo(String foo) {
Bean.foo = foo;
}
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
public String getFooBar() {
return fooBar;
}
public void setFooBar(String fooBar) {
Bean.fooBar = fooBar;
}
}
和
public static void main(String[] args) throws Exception {
BeanInfo beanInfo = Introspector.getBeanInfo(Bean.class);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor propertyDescriptor : propertyDescriptors){
System.out.println(propertyDescriptor.getName());
}
}
上面的代码运行如下:
bar
class
fooBar
它只返回bar和foorBar
是否意味着Introspector找不到静态属性或实际上getter/setter
方法?
答案 0 :(得分:2)
打印出propertyDescriptor
对象而不是它的名称,你可以看到它查看bean类的方法。
Javadoc说: 如果我们没有在类上找到显式BeanInfo,我们使用低级反射来研究类的方法并应用标准设计模式来识别属性访问器,事件源或公共方法
因此,大概“标准设计模式”意味着非静态访问器。也就是说,它会查找public void setXXX(T)
和public T getXXX()
方法。