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

JavaBeans 基礎屬性類型詳解:Simple、Indexed、Bound、Constrained

     編輯:J2EE

前言

JavaBeans 規範定義四種屬性類型,透過命名慣例與特定介面實作,賦予屬性不同的語意與行為,支援視覺化建構工具的屬性表編輯、事件連結與約束驗證。

1. Simple Property (簡單屬性)

單一值屬性,配對 getX()/setX() 方法。布林屬性可用 isX() 替代 getX()。

public class Alden1 extends Canvas {
    private String ourString = "Hello";

    public String getString() { return ourString; }
    public void setString(String newString) { ourString = newString; }
}

2. Indexed Property (索引屬性)

陣列或 List 型別屬性,提供單元存取與整體存取的重載方法。

public class Alden2 extends Canvas {
    private int[] dataSet = {1,2,3,4,5,6};

    public int[] getDataSet() { return dataSet; }           // 取得整個陣列
    public void setDataSet(int[] x) { dataSet = x; }        // 設定整個陣列
    public int getDataSet(int index) { return dataSet[index]; } // 取得單一元素
    public void setDataSet(int index, int x) { dataSet[index] = x; } // 設定單一元素
}

3. Bound Property (繫結屬性)

屬性值變更時發送 PropertyChangeEvent 通知已註冊監聽器,支援元件間屬性同步 (如按鈕背景色變更同步對話框背景色)。

public class Alden3 extends Canvas {
    private String ourString = "Hello";
    private PropertyChangeSupport changes = new PropertyChangeSupport(this);

    public String getString() { return ourString; }

    public void setString(String newString) {
        String old = ourString;
        ourString = newString;
        changes.firePropertyChange("ourString", old, newString); // 發送事件
    }

    // 設計工具註冊/移除監聽器
    public void addPropertyChangeListener(PropertyChangeListener l) {
        changes.addPropertyChangeListener(l);
    }
    public void removePropertyChangeListener(PropertyChangeListener l) {
        changes.removePropertyChangeListener(l);
    }
}

4. Constrained Property (約束屬性)

屬性值變更前發送 VetoableChangeEvent,監聽器可拋出 PropertyVetoException 否決變更。需同時維護 PropertyChangeSupport (變更後通知) 與 VetoableChangeSupport (變更前驗證)。

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

    public int getPriceInCents() { return priceInCents; }

    public void setPriceInCents(int newPrice) throws PropertyVetoException {
        int old = priceInCents;
        vetos.fireVetoableChange("priceInCents", old, newPrice); // 可能拋出 Veto
        priceInCents = newPrice;
        changes.firePropertyChange("priceInCents", old, newPrice); // 確認變更
    }

    public void addVetoableChangeListener(VetoableChangeListener l) {
        vetos.addVetoableChangeListener(l);
    }
    public void removeVetoableChangeListener(VetoableChangeListener l) {
        vetos.removeVetoableChangeListener(l);
    }
    // PropertyChangeListener 註冊方法同 Bound Property
}

比較總結

屬性類型關鍵介面/類別事件用途
Simpleget/set 慣例無基本資料保存
Indexedget/set 重載 (含 index)無陣列/集合元素存取
BoundPropertyChangeSupportPropertyChangeEvent屬性同步、UI 聯動
ConstrainedVetoableChangeSupportVetoableChangeEvent驗證/審核機制 (如價格上限)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved