2014-04-28 86 views
1

找到getter和setter方法我有这样的Java反射

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来查找每个属性的getter和setter方法我用下面的代码

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 

为什么是APP呢?不应该是

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

或为什么我做错了?如何完成它谢谢?

我认为getter和setter方法是产生正确地根据在SO其他岗位而这个链接

Link

的方法产生由Netbeans and Eclipse and intellij

UPDATE 这里是另一个热点论坛关于它同样的问题,请查看

Another SO post

回答

5

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

注意,属性名应该以小写字符, 将在方法名大写启动。

他们应该

public String getAPlaceAt() { 
    return aPlaceAt; 
} 

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

错误信息是一种误导。 introspector会尝试找到getAPlaceAt,然后isAPlaceAt。它会报告它尝试过的最后一件事但失败了。

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

+0

它们是由netbeans产生的 – chiperortiz

+0

@chiperortiz嗯。 Netbeans并没有遵循bean的命名规则。 –

+0

@chiperortiz你也需要改变我的答案中显示的吸气剂。 –