Flash CS3 文件 |
|||
| ActionScript 3.0 程式設計 > 使用 ActionScript 設計物件導向程式 > 類別 > Enumerations 與類別 | |||
Enumerations 是您建立的自訂資料類型,以封裝一小組值。ActionScript 3.0 不支援特定列舉功能,跟 C++ 及其 enum 關鍵字或 Java 及其 Enumeration 介面都不同,但是您可以使用類別和靜態常數建立列舉項目。例如,Flash Player API 中的 PrintJob 類別使用名為 PrintJobOrientation 的列舉項目,儲存一組由 "landscape" 和 "portrait" 組成的值,如下列程式碼所示:
public final class PrintJobOrientation
{
public static const LANDSCAPE:String = "landscape";
public static const PORTRAIT:String = "portrait";
}
依照慣例,enumeration 類別是以 final 特質宣告,因為不必再擴充該類別。此類別僅包含靜態成員,也就是說,您不建立類別的實體,而是直接透過類別物件存取列舉值,如下列程式碼摘錄所示:
var pj:PrintJob = new PrintJob();
if(pj.start())
{
if (pj.orientation == PrintJobOrientation.PORTRAIT)
{
...
}
...
}
Flash Player API 中所有 enumeration 類別都只包含 String、int 或 uint 類型的變數。使用 enumeration 而不用常值字串或數字值的優點是使用 enumeration 時很容易找出拼寫錯誤;如果 enumeration 名稱有打字錯誤時,ActionScript 編譯器會產生錯誤。若使用常值,如果一個字的拼法不正確,或使用的數字錯誤,編譯器不會報告。在上一個範例中,如果 enumeration 常數的名稱不正確,編譯器就會產生錯誤,如下列摘錄所示:
if (pj.orientation == PrintJobOrientation.PORTRAI) // 編譯器錯誤
但是,如果字串常值的拼寫錯誤,則編譯器不會產生錯誤,如下所示:
if (pj.orientation == "portrai") // 沒有編譯器錯誤
第二種建立 enumeration 的技巧也包含用 enumeration 的靜態屬性另外建立類別。這種技巧的差別在於:每一個靜態屬性都包含類別的實體,而不包含字串或整數值。例如,下列程式碼會為星期中的日期建立 enumeration 類別:
public final class Day
{
public static const MONDAY:Day = new Day();
public static const TUESDAY:Day = new Day();
public static const WEDNESDAY:Day = new Day();
public static const THURSDAY:Day = new Day();
public static const FRIDAY:Day = new Day();
public static const SATURDAY:Day = new Day();
public static const SUNDAY:Day = new Day();
}
Flash Player API 不使用這項技巧,但很多開發人員喜歡它所提供的改良類型檢查,因此都會使用這項技巧。例如,傳回列舉值的方法可以將傳回值限定於 enumeration 資料類型。下列程式碼不但示範會傳回星期別的函數,也示範使用 enumeration 類型做為類型附註的函數呼叫:
function getDay():Day
{
var date:Date = new Date();
var retDay:Day;
switch (date.day)
{
case 0:
retDay = Day.MONDAY;
break;
case 1:
retDay = Day.TUESDAY;
break;
case 2:
retDay = Day.WEDNESDAY;
break;
case 3:
retDay = Day.THURSDAY;
break;
case 4:
retDay = Day.FRIDAY;
break;
case 5:
retDay = Day.SATURDAY;
break;
case 6:
retDay = Day.SUNDAY;
break;
}
return retDay;
}
var dayOfWeek:Day = getDay();
您也可以加強 Day 類別,讓它將整數與星期中的每一天相關聯,然後提供傳回代表各天之字串的 toString() 方法。您可能需要用這種方式加強 Day 類別做為練習。
Flash CS3
目前頁面: http://livedocs.adobe.com/flash/9.0_tw/main/00000065.html