JavaBean詳解

在Java中,有不少class的定義都符合這樣的規範:java

  • 若干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; }
}

若是讀寫方法符合如下這種命名規範:this

// 讀方法:
public Type getXyz()
// 寫方法:
public void setXyz(Type value)

那麼這種class被稱爲JavaBean:spa

JavaBean詳解

上面的字段是xyz,那麼讀寫方法名分別以get和set開頭,而且後接大寫字母開頭的字段名Xyz,所以兩個讀寫方法名分別是getXyz()和setXyz()。設計

boolean字段比較特殊,它的讀方法通常命名爲isXyz():3d

// 讀方法:
public boolean isChild()
// 寫方法:
public void setChild(boolean value)

咱們一般把一組對應的讀方法(getter)和寫方法(setter)稱爲屬性(property)。例如,name屬性:code

  • 對應的讀方法是String getName()
  • 對應的寫方法是setName(String)

只有getter的屬性稱爲只讀屬性(read-only),例如,定義一個age只讀屬性:blog

  • 對應的讀方法是int getAge()
  • 無對應的寫方法setAge(int)

相似的,只有setter的屬性稱爲只寫屬性(write-only)。繼承

很明顯,只讀屬性很常見,只寫屬性不常見。ip

屬性只須要定義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便於傳輸。此外,JavaBean能夠方便地被IDE工具分析,生成讀寫屬性的代碼,主要用在圖形界面的可視化設計中。

經過IDE,能夠快速生成getter和setter。例如,在Eclipse中,先輸入如下代碼:

public class Person {
    private String name;
    private int age;
}

而後,點擊右鍵,在彈出的菜單中選擇「Source」,「Generate Getters and Setters」,在彈出的對話框中選中須要生成getter和setter方法的字段,點擊肯定便可由IDE自動完成全部方法代碼。

枚舉JavaBean屬性

要枚舉一個JavaBean的全部屬性,能夠直接使用Java核心庫提供的Introspector:

import java.beans.*;

Run

運行上述代碼,能夠列出全部的屬性,以及對應的讀寫方法。注意class屬性是從Object繼承的getClass()方法帶來的。

小結

JavaBean是一種符合命名規範的class,它經過getter和setter來定義屬性;

屬性是一種通用的叫法,並不是Java語法規定;

能夠利用IDE快速生成getter和setter;

使用Introspector.getBeanInfo()能夠獲取屬性列表

相關文章
相關標籤/搜索