Java находит сеттеры и геттеры по отражению

1

У меня такой класс

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 вот еще один горячий форум об этой же проблеме, пожалуйста, проверьте это

Другая должность SO

Теги:
reflection
setter
getter

1 ответ

5

Имена получателя/сеттера не соответствуют соглашениям об именах Java-компонентов (или, возможно, do). Для PropertyDescriptor, согласно javadoc

Обратите внимание, что имя свойства должно начинаться с символа нижнего регистра, который будет заглавный в именах методов.

они должны быть

public String getAPlaceAt() {
    return aPlaceAt;
}

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

Сообщение об ошибке вводит в заблуждение. Интроспектор попытается найти getAPlaceAt а затем isAPlaceAt. Он сообщит о последней попытке, но потерпел неудачу.

Вы можете избежать таких ошибок, создавая сеттеры/получатели через IDE.

  • 0
    они генерируются NetBeans
  • 0
    @chiperortiz Хм. Netbeans тогда не следует соглашениям по именованию бинов.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню