Ниже приведен небольшой пример, который легко воспроизводит проблему. Поэтому у меня есть переменная типа String, на которой установлено значение по умолчанию. У меня есть 3 метода:
- геттер
- сеттер
- метод удобства, который преобразует строку в boolean
Интроспекция не возвращает getter как readMethod и setter как метод writeMethod. Вместо этого он возвращает метод isTest() как метод readMethod. Установщик пуст.
Из документации я понимаю, что если тип будет логическим, метод "is" имеет более высокий приоритет над get, но тип - String, поэтому не имеет смысла даже искать "is-xxx", метод?
public class Test {
public class Arguments {
private String test = Boolean.toString(true);
public boolean isTest() {
return Boolean.parseBoolean(test);
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IntrospectionException {
BeanInfo info = Introspector.getBeanInfo(Arguments.class);
System.out.println("Getter: " + info.getPropertyDescriptors()[1].getReadMethod());
System.out.println("Setter: " + info.getPropertyDescriptors()[1].getWriteMethod());
PropertyDescriptor descr = new PropertyDescriptor("test", Arguments.class);
System.out.println("T");
}
}
Есть ли кто-нибудь, кто имеет представление об этом?
Дополнительная информация:
- Заказ не изменяет результат. Метод isTest() всегда рассматривается как readMethod
- Если я просто переименую isTest() в bsTest(), он выбирает getter и setter как readMethod и writeMethod. Таким образом, это имеет какое-то отношение к "is-xxx".