我有一个这样的课程
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
方法由Netbeans and Eclipse and intellij
更新 这是另一个关于它的热门论坛同样的问题请查看
答案 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来避免此类错误。