JavaBean определяется его свойствами (т.е. его методами получения и установки), а не его полями . Хотя термины используются взаимозаменяемо, это на самом деле не правильно. Механизм Introspector
полностью игнорирует поля.
Пример
Возьми это (ужасно разработанный) Джавабин:
public class TestBean {
private int baz;
private char[] phleem;
public String getFoo() {
return new String(phleem);
}
public void setFoo(final String foo) {
this.phleem = foo.toCharArray();
}
public long getBar() {
return baz;
}
public void setBar(final long bar) {
this.baz = (int) bar;
}
}
Вы могли бы подумать, что свойства:
- "Баз" (
int
)
- "Phleem" (
char[]
)
но теперь давайте проверим это с помощью интроспектора Javabeans:
for (PropertyDescriptor descriptor : Introspector
.getBeanInfo(TestBean.class, Object.class)
.getPropertyDescriptors()) {
System.out.println("Name: " + descriptor.getName() +
", type: " + descriptor.getPropertyType());
}
Вот вывод:
Name: bar, type: long
Name: foo, type: class java.lang.String
Вывод:
Геттеры и сеттеры - это то, что определяет свойство Javabeans. Это соглашение , что они поддерживаются полями с одинаковыми именами и типами, но поля на самом деле не являются частью свойств Javabean (хотя во многих документах предлагается иное).
Перечитав мой ответ: он подразумевается как дополнение к другим ответам. Если вы хотите краткий и простой ответ, используйте Скаффман.