定义
在Java中,有很多 class 的定义都符合这样的规范:
- 若干
private实例字段; - 通过
public方法来读写实例字段。
如果读写方法符合以下这种命名规范:
public Type getXyz()public void setXyz(Type value)
那么这种 class 被称为 JavaBean。boolean 字段比较特殊,它的读方法一般命名为 isXyz()。
我们通常把一组对应的读方法(getter)和写方法(setter)称为属性(property)。属性只需要定义 getter 和 setter 方法,不一定需要对应的字段。例如,child 只读属性定义如下:
public class Person {private String name;private int age;public String getName() { return this.name; }public void setName(String name) { this.name = name; }public int getAge() { return this.age; }public void setAge(int age) { this.age = age; }public boolean isChild() {return age <= 6;}}
可以看出,getter 和 setter 也是一种数据封装的方法。
JavaBean主要用来传递数据,即把一组数据组合成一个JavaBean便于传输。此外,JavaBean可以方便地被IDE工具分析,生成读写属性的代码,主要用在图形界面的可视化设计中。
枚举JavaBean属性
要枚举一个JavaBean的所有属性,可以直接使用Java核心库提供的Introspector:
import java.beans.*;public class Main {public static void main(String[] args) throws Exception {BeanInfo info = Introspector.getBeanInfo(Person.class);for (PropertyDescriptor pd : info.getPropertyDescriptors()) {System.out.println(pd.getName());System.out.println(" " + pd.getReadMethod());System.out.println(" " + pd.getWriteMethod());}}}class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
