У меня такой класс
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
Я использую следующий код
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
почему isAPlaceAt? не должно быть
public void setaPlaceAt(String aPlaceAt){this.aPlaceAt = aPlaceAt;}?
или почему я делаю неправильно? как это можно добиться?
Я думаю, что сеттеры и геттеры генерируются правильно в соответствии с другими сообщениями в SO, и эта ссылка
методы генерируются Netbeans and Eclipse and intellij
UPDATE вот еще один горячий форум об этой же проблеме, пожалуйста, проверьте это
Имена получателя/сеттера не соответствуют соглашениям об именах Java-компонентов (или, возможно, do). Для PropertyDescriptor
, согласно javadoc
Обратите внимание, что имя свойства должно начинаться с символа нижнего регистра, который будет заглавный в именах методов.
они должны быть
public String getAPlaceAt() {
return aPlaceAt;
}
public void setAPlaceAt(String aPlaceAt) {
this.aPlaceAt = aPlaceAt;
}
Сообщение об ошибке вводит в заблуждение. Интроспектор попытается найти getAPlaceAt
а затем isAPlaceAt
. Он сообщит о последней попытке, но потерпел неудачу.
Вы можете избежать таких ошибок, создавая сеттеры/получатели через IDE.