chi*_*tiz 1 java reflection getter setter
我有这样的课
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;}
}
Run Code Online (Sandbox Code Playgroud)
后来我需要找到每个属性的setter和getter,reflection
我使用下面的代码
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()));
Run Code Online (Sandbox Code Playgroud)
他们返回正确的setter以供参考,但是对于属性aPlaceAt
投
Exception in thread "main" java.beans.IntrospectionException: Method not found: isAPlaceAt
Run Code Online (Sandbox Code Playgroud)
为什么是啊?不应该
public void setaPlaceAt(String aPlaceAt){this.aPlaceAt = aPlaceAt;}?
Run Code Online (Sandbox Code Playgroud)
或者为什么我做错了?怎么能完成它谢谢?
我认为根据SO和此链接的其他帖子正确生成了setter和getter
方法是由...生成的 Netbeans and Eclipse and intellij
更新 这里是另一个关于它的热门论坛同样的问题请检查出来
您的getter/setter名称不遵循Java bean命名约定(或者可能是do).对于PropertyDescriptor
,根据javadoc
请注意,属性名称应以小写字符开头,该字符将在方法名称中大写.
他们应该是
public String getAPlaceAt() {
return aPlaceAt;
}
public void setAPlaceAt(String aPlaceAt) {
this.aPlaceAt = aPlaceAt;
}
Run Code Online (Sandbox Code Playgroud)
错误消息有点误导.内省探测器会尝试找到getAPlaceAt
然后isAPlaceAt
.它将报告它尝试的最后一件事但失败了.
您可以通过IDE生成setter/getter来避免此类错误.
归档时间: |
|
查看次数: |
1046 次 |
最近记录: |