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

JavaBeans 屬性深度解析:從 Simple 到 Bound 屬性的完整指南

     編輯:Java 程式設計入門

JavaBeans 屬性概述

在 JavaBeans 規範中,「屬性」的概念與一般 Java 類別中的成員變數(Field)或物件導向語言中的物件屬性同義,具體對應到類別中的變數。依據功用不同,JavaBeans 將屬性細分為四大類:Simple(簡單)、Indexed(索引)、Bound(繫結)與 Constrained(約束)屬性。掌握這四種屬性的特性與實作方式,是開發符合規範、可被建構工具識別的元件關鍵。

1. Simple 屬性:最基礎的屬性模型

Simple 屬性對應單一數值,並遵循標準的 get/set 命名慣例。屬性名稱由方法名推導而來:若存在 getX() 與 setX(),即暗示有一名為 "X" 的屬性;若為 isX(),則通常代表布林屬性。

public class AldenBean extends Canvas {
    private String ourString = "Hello";  // 屬性名 ourString,型別 String

    public AldenBean() {
        setBackground(Color.red);
        setForeground(Color.blue);
    }

    // 設值方法
    public void setString(String newString) {
        ourString = newString;
    }

    // 取值方法
    public String getString() {
        return ourString;
    }
}

此範例展示了標準的 Simple 屬性封裝:私有欄位配合公用存取器,確保資料封裝與工具識別。

2. Indexed 屬性:陣列與集合的存取介面

Indexed 屬性代表一組有序值(陣列或 List),提供兩種存取模式:整體存取(一次設定/取得完整陣列)與單元素存取(透過索引操作特定元素)。

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

    public DataBean() {
        setBackground(Color.red);
        setForeground(Color.blue);
    }

    // 整體設定/取得
    public void setDataSet(int[] x) { dataSet = x; }
    public int[] getDataSet() { return dataSet; }

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

建構工具透過方法簽章辨識 Indexed 屬性:setX(int[], ...) 與 setX(int, ...) 共存即視為索引屬性。

3. Bound 屬性:變更通知機制

Bound 屬性在數值變更時會觸發 PropertyChangeEvent,通知所有已註冊的監聽器(Listener)。事件物件封裝了屬性名稱、舊值與新值。此機制支援元件間的資料同步,例如按鈕背景色變更時,對話框背景色自動跟隨更新。

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

    public void setString(String newString) {
        String oldString = ourString;
        ourString = newString;
        // 觸發屬性變更事件
        changes.firePropertyChange("ourString", oldString, newString);
    }

    public String getString() { return ourString; }

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

關鍵點:

  • 使用 PropertyChangeSupport 管理監聽器清單與事件分發
  • firePropertyChange 方法參數依序為:屬性名、舊值、新值
  • 必須提供 add/removePropertyChangeListener 供外部工具掛接

4. Constrained 屬性:變更驗證與否決

Constrained 屬性延伸 Bound 機制,允許監聽器透過拋出 PropertyVetoException 否決變更。實作時需改用 VetoableChangeSupport 並拋出受檢異常,確保關鍵屬性變更受嚴格控管。

總結與最佳實務

屬性類型核心特徵適用場景
Simple單值、標準 get/set一般資料欄位
Indexed陣列/集合、雙重存取介面表格資料、多值設定
Bound變更觸發 PropertyChangeEventUI 同步、資料綁定
Constrained可否決變更、拋出 Veto 異常關鍵設定、權限控制

遵循 JavaBeans 命名慣例與事件模型,不僅能讓元件在視覺化建構工具中正確運作,也奠定了現代 Java 框架(如 Spring、JavaFX)屬性綁定與依賴注入的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved