java Introspector 找不到静态属性或实际上是静态 getter/setter 方法?

标签 java

我用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/

相关文章:

java - Init block VS 在构造函数中调用的 init() 私有(private)方法

java - 无法从 jar 加载类定义

java - TLS-Package 后的神秘字节

java - 如何提取Lotus Notes数据库图标?

java - 部分匹配的可能解决方案(n 个字段中至少有 p 个匹配)

java - 在 Java 中克隆对象时,字符串会发生什么?

java - 扫描仪输入的子字符串

java - ant junit 测试的颜色(红色/绿色)控制台输出

java - Java读取MySQL数据库的问题

java - Spring Security - Autowiring 不工作