在 Java 中使用一個 getter 和 setter 符號,為對象的屬性提供一致的接口已成為一種標準實踐。我們在 Java 中不進行以下操作是有原因的:
public String fullName;
實際上,上述代碼在類及類的實現者之間創建了一個接口(或合同),該接口不允許我們在類的實例上訪問 fullName 屬性時更改返回結果的基礎實現dota流浪劍客和水晶室女等英雄初期裝備攻略。因此,如果有人使用 Java 代碼訪問數碼 fullName 屬性:
blah = obj.fullName;
或者設置 fullName 屬性:
obj.fullName = "blah";
那么,在 Java 中沒有辦法更改獲取或設置 fullName
屬性的行為。如果類的設計者想要更改獲取或設置屬性的基礎行為,他們必須更改類實現者與類進行交互的方式。這顯然不是理想之選,所以在 Java
中我們通常使用 get 和 set 函數隱藏屬性。Java 語言尚無 Java 屬性,所以我們使用多種方法來隱藏實現。因此,我們的 Java
類將是:
private String fullName;
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
這允許類設計者更改獲取和設置 fullName 屬性的行為,同時不更改外部接口。
在 Flex 中,通常不必在對象上創建包裝 getter 和 setting 函數,因為 ActionScript 支持屬性。這意味著,您通常僅可以創建如下的公共屬性:
public var fullName:String;
如果獲取或設置 fullName 屬性的內部實現需要更改,那么可以改編類,以具備 getter 和 setter 函數,而無需更改類的外部接口:
private var _fullName:String;
public function get fullName():String {
return _fullName;
}
public function set fullName(_fullName:String):void {
this._fullName = _fullName;
}
對于類實現者來說,屬性 fullName 還可以通過常規符號獲取和設置:
// getters
blah = obj.fullName;
blah = obj['fullName'];
// setters
obj.fullName = "blah";
obj['fullName'] = "blah";
獲取或設置屬性將調用 getter 和 setter 函數,而不是直接訪問屬性。這支持對象接口的一致性,即便獲取和設置屬性的基礎實現發生了更改。這同樣支持屬性發生更改時類分配事件(這就是數據綁定是如何在 Flex 內部工作的)。
我注意到很多 Java 開發人員都對 ActionScript 類上的公共屬性非常警惕。不必!ActionScript
支持真正的屬性,因此您不再需要屬性 getter 和 setter,除非您正在進行一些非同尋常的操作。而且,您可以切換到 getter 和
setter,而無須更改對象的接口。
posted on 2010-11-06 15:09
墻頭草 閱讀(733)
評論(0) 編輯 收藏