我用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 和 fooBar
这是否意味着 Introspector 找不到静态属性或实际上的 getter/setter
方法?
最佳答案
打印出 propertyDescriptor
对象而不是它的名称,您可以看到它查看 bean 类上的方法。
Javadoc 说: 如果我们在类上没有找到显式的 BeanInfo,我们会使用低级反射来研究类的方法,并应用标准设计模式来识别属性访问器、事件源或公共(public)方法
因此,“标准设计模式”大概是指非静态访问器。也就是说,它查找 public void setXXX(T)
和 public T getXXX()
方法。
关于java Introspector 找不到静态属性或实际上是静态 getter/setter 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39035314/