【问题标题】:Java find setters and getters by reflectionJava通过反射找到setter和getter
【发布时间】:2014-04-28 14:26:28
【问题描述】:

我有这样的课

public class Student
{

    private String reference;
    private String aPlaceAt;
    //methods generate by Netbeans Eclipse generates the same methods
    public String getaPlaceAt(){return aPlaceAt;}
    public void setaPlaceAt(String aPlaceAt){this.aPlaceAt = aPlaceAt;}    
    public String getReference(){return reference;}
    public void setReference(String reference){this.reference = reference;}       
}

稍后我需要通过 reflection 找到每个属性的 setter 和 getter,我正在使用以下代码

public Method findSetterFor(final Class clazz,final String propertyName) throws Exception
{
    return new PropertyDescriptor(propertyName,clazz).getWriteMethod();
}

for(final Field field:clazz.testClazz.getDeclaredFields())
System.out.println(field.getName()+" "+clazz.findSetterFor(clazz.testClazz,field.getName()));        

他们返回正确的设置器以供参考,但对于属性 aPlaceAt

抛出

Exception in thread "main" java.beans.IntrospectionException: Method not found: isAPlaceAt

为什么是APlaceAt?不应该是

public void setaPlaceAt(String aPlaceAt){this.aPlaceAt = aPlaceAt;}?

或者为什么我做错了?怎样才能做到谢谢?

我认为 setter 和 getter 是根据 SO 上的其他帖子和此链接正确生成的

Link

方法由Netbeans and Eclipse and intellij生成

更新 这是另一个关于它的热门论坛,同样的问题,请检查一下

Another SO post

【问题讨论】:

    标签: java reflection setter getter


    【解决方案1】:

    您的 getter/setter 名称不遵循 Java bean 命名约定 (or maybe the do)。对于PropertyDescriptor,根据javadoc

    请注意,属性名称应以小写字符开头, 在方法名称中将大写。

    他们应该是

    public String getAPlaceAt() {
        return aPlaceAt;
    }
    
    public void setAPlaceAt(String aPlaceAt) {
        this.aPlaceAt = aPlaceAt;
    }
    

    错误信息有点误导。自省器将尝试查找getAPlaceAt,然后查找isAPlaceAt。它将报告它尝试但失败的最后一件事。

    您可以通过 IDE 生成 setter/getter 来避免此类错误。

    【讨论】:

    • 它们是由 netbeans 生成的
    • @chiperortiz 嗯。 Netbeans 没有遵循 bean 命名约定。
    • @chiperortiz 您还需要更改 getter,如我的回答所示。
    • 现在似乎可以工作了.. 但我有两个问题.. 为什么 eclipse 和 netbeans 和 intellij 以这种方式创建设置器.. 使用投影搜索相同的方法签名仅此 PropertyDescription 使用这样......
    • 嘿@Sotirios Delimanolis 请检查我编辑的问题非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多