Я должен не согласен с this answer. У меня был такой же вопрос, и я написал быстрый тест.
Учитывая JavaBean как:
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public Boolean isPublished() {
return published;
}
}
и главный класс, который выглядит следующим образом:
package example;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
BeanInfo beanInfo = null;
try {
beanInfo = Introspector.getBeanInfo(FooBean.class);
} catch (IntrospectionException e) {
e.printStackTrace();
}
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor descriptor : propertyDescriptors){
System.out.println("descriptor: " + descriptor);
System.out.println("descriptor.getName(): " + descriptor.getName());
System.out.println("descriptor.getReadMethod(): " + descriptor.getReadMethod());
}
}
}
В результате запуска главного класса:
descriptor: [email protected]
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: [email protected]
descriptor.getName(): published
descriptor.getReadMethod(): null
Если изменить FooBean.java
выглядеть следующим образом:
package example;
public class FooBean {
private boolean published;
public void setPublished(boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
Затем полученный результат:
descriptor: [email protected]
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: [email protected]
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()
Это говорит мне, что для того, чтобы быть корректным JavaBeans подпись, тип должен быть объявлен примитивную логическое значение.
Редактировать После дальнейших испытаний оказалось, что только заявленный тип возвращаемого из isXxx() метод должен быть булева для JavaBeans, чтобы признать это:
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
Результат:
descriptor: [email protected]
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: [email protected]
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()
Почему не пытайтесь это сделать в своем коде. – RanRag
Очень важен. –
Извините ... Я знаю, что это сработает, но действительно ли оно соответствует стандартам именования javabean? – Continuity8