首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

JavaBean 屬性分類深度解析:Simple、Indexed、Bound、Constrained

     編輯:J2EE

前言

JavaBean 規範定義四種屬性類型,透過方法命名慣例與特定事件支援類別,賦予屬性豐富的語意與互動行為,是視覺化建構工具與運行時期元件協作的基石。

1. Simple Property (簡單屬性)

單一標量值,對應一對 getX()/setX() (布林可用 isX())。

public class Alden1 extends Canvas {
    private String ourString = "Hello";
    public String getString() { return ourString; }
    public void setString(String s) { ourString = s; }
}

2. Indexed Property (索引屬性)

陣列或有序集合,提供整體存取與索引存取的重載方法組。

public class Alden2 extends Canvas {
    private int[] dataSet = {1,2,3,4,5,6};
    public int[] getDataSet() { return dataSet; }
    public void setDataSet(int[] d) { dataSet = d; }
    public int getDataSet(int i) { return dataSet[i]; }
    public void setDataSet(int i, int v) { dataSet[i] = v; }
}

3. Bound Property (繫結屬性)

值變更時發送 PropertyChangeEvent,支援「屬性連結」:來源 Bean 屬性變更自動同步至目標 Bean 對應屬性。

  • 內部持有 PropertyChangeSupport 管理監聽器清單。
  • setX() 中呼叫 firePropertyChange("x", old, new)。
  • 提供 add/removePropertyChangeListener 供建構工具或程式註冊。
public class Alden3 extends Canvas {
    private String ourString = "Hello";
    private PropertyChangeSupport changes = new PropertyChangeSupport(this);
    public void setString(String s) {
        String old = ourString; ourString = s;
        changes.firePropertyChange("ourString", old, s);
    }
    public void addPropertyChangeListener(PropertyChangeListener l) { changes.addPropertyChangeListener(l); }
    public void removePropertyChangeListener(PropertyChangeListener l) { changes.removePropertyChangeListener(l); }
}

4. Constrained Property (約束屬性)

值變更前發送 VetoableChangeEvent,監聽器可拋出 PropertyVetoException 否決變更。需同時維護 Bound 機制 (變更後通知)。


public class JellyBean extends Canvas {
    private int priceInCents = 0;
    private PropertyChangeSupport changes = new PropertyChangeSupport(this);
    private VetoableChangeSupport vetos = new VetoableChangeSupport(this);

    public void setPriceInCents(int newPrice) throws PropertyVetoException {
        int old = priceInCents;
        vetos.fireVetoableChange("priceInCents", old, newPrice); // 可能被否決
        priceInCents = newPrice;
        changes.firePropertyChange("priceInCents", old, newPrice); // 確認生效
    }
    // VetoableChangeListener 註冊方法
    public void addVetoableChangeListener(VetoableChangeListener l) { vetos.addVetoableChangeListener(l); }
    public void removeVetoableChangeListener(VetoableChangeListener l) { vetos.removeVetoableChangeListener(l); }
    // PropertyChangeListener 註冊方法同 Bound
}

兩種監聽器角色

  • PropertyChangeListener:事後得知變更,執行同步、記錄、觸發其他邏輯。
  • VetoableChangeListener:事前審核,依業務規則決定是否允許 (如價格不得低於成本)。

總結對照表

類型核心支援類別事件典型應用
Simple無無一般資料欄位
Indexed無無表格資料、列表項目
BoundPropertyChangeSupportPropertyChangeEventUI 聯動、模型同步
ConstrainedVetoableChangeSupportVetoableChangeEvent資料驗證、權限審核
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved