Java核心类——JavaBean

在Java中,有很多class的定义都符合这样的规范:
若干private实例字段;
通过public方法来独写实例字段;
之前获取和设置字段都是以以下方式:

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 Type getXyz()
public void setXyz(Type value)

 那么这种class被称为JavaBean。

上面的字段是xyz,那么读写方法分别以get和set开头,
并且后接大写字母开头的字段名Xyz。

还有一种叫做boolean,它的读方法一般命名为isXyz():

public boolean isChild()
public void setChild(boolean value)

我们通常把一组对应的读方法(getter)和写方法(setter)称为属性(property).
  对应的读方法是 String getName()
  对应的写方法是 setName(String)
只有getter的属性称为只读属性(read-only),例如,定义一个age只读属性:
  对应的读方法是int getAge()

 

JavaBean的作用
JavaBean主要用来传递数据,即把一组数据组合成一个JavaBean便于传输。
此外,JavaBean可以方便被IDE工具分析,生成独写属性的代码,主要用在图形接面的可视化设计中。

 

枚举JavaBean属性
要枚举一个JavaBean属性,可以直接使用Java核心库Inrospector:

package com.imooc.iexecption;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

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;
    }
}


public class catchExample2 {
    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());
        }
    }
}

// 结果
//age
//public int com.imooc.iexecption.Person.getAge()
//public void com.imooc.iexecption.Person.setAge(int)

//class
//public final native java.lang.Class java.lang.Object.getClass()
//        null 

//name
//public java.lang.String com.imooc.iexecption.Person.getName()
//public void com.imooc.iexecption.Person.setName(java.lang.String)

通过上述代码,可以列出所有的属性,以及对应的读写方法。
注意class属性Object继承的getClass()方法带来的。

 

posted @ 2020-03-16 00:42  明王不动心  阅读(252)  评论(0编辑  收藏  举报