Java通过反射找到setter和getter

时间:2014-04-28 14:26:29

标签: java reflection setter getter

我有一个这样的课程

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()));        

他们返回正确的setter以供参考但属性 aPlaceAt

抛出

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

为什么是APAtt?不应该

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

或为什么我做错了?怎么能完成它谢谢?

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

Link

方法由Netbeans and Eclipse and intellij

生成

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

Another SO post

1 个答案:

答案 0 :(得分:5)

您的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来避免此类错误。