Un JavaBean se define por su propiedades (es decir, sus métodos get y set), no es campos. Aunque los términos se usan de manera intercambiable, eso en realidad no es correcto. El mecanismo Introspector
ignora los campos por completo.
Ejemplo
Tome este Javabean (terriblemente diseñada):
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;
}
}
Uno pensaría que las propiedades son:
- "Baz" (
int
)
- " phleem "(
char[]
)
pero ahora vamos a inspeccionar con la Javabeans introspector:
for (PropertyDescriptor descriptor : Introspector
.getBeanInfo(TestBean.class, Object.class)
.getPropertyDescriptors()) {
System.out.println("Name: " + descriptor.getName() +
", type: " + descriptor.getPropertyType());
}
Aquí está la salida:
Name: bar, type: long
Name: foo, type: class java.lang.String
Conclusión:
getters y setters son las que definen una propiedad Javabeans . Es una convención que están respaldados por campos del mismo nombre y tipo, pero los campos no son realmente parte de las propiedades de Javabean (aunque muchas documentaciones sugerirán lo contrario).
Al volver a leer mi respuesta: se trata de una adición a las otras respuestas. Si quieres una respuesta corta y simple, ve con skaffman's.
Lo siento pero no entiendo bien. Si no hay una coincidencia obligatoria entre un nombre de variable y un nombre de método get/set, ¿cómo puede una herramienta de compilación obtener o establecer esa variable, es decir, su nombre? – xdevel2000
@ xdevel2000: Porque esa "falta de coincidencia" está definida por la especificación javaBean, como una convención de nomenclatura. – skaffman
Como dije: es una convención, nada más. En el 99% de los casos, debe usar esta convención y las herramientas le ayudarán * solo * si usa esta convención. Pero solo quería informarle que los campos subyacentes * no son * propiedades de beans, mientras que los métodos getter y setter sí lo son. –