[Java] 10.1. 列舉

關於選項,交給列舉吧。

 

image/svg+xml10.1. 列舉 - enum class TrainingCenter { public Employee giveTraining ( Person p , String type ){ Employee e = null ; if ( type == " Programmer " ) e = new Programmer (); if ( type == " Artist " ) e = new Artist (); if ( type == " Tester " ) e = new Tester (); if ( e != null ){ e.id = p.id; e.name = p.name; e.gender = p.gender; e.age = p.age; } return e ; } } class Main{ public static void main( String [] args){ Person p = new Person (); p.id = "K123456789" ; p.name = "Jack" ; p.gender = " 男⽣ " ; p.age= 25 ; TrainingCenter t = new TrainingCenter (); Employee e1 = t.giveTraining ( p , " Programmer " ); Employee e2 = t.giveTraining(p, "Artist" ); Employee e3 = t. giveTraining (p, "Tester" ); System.out.println(e1); System.out.println(e2); System.out.println(e3); } } 執⾏結果 Programmer@10b30a7 Artist@1a758cb Tester@1b67f74 class Main{ public static void main( String [] args){ Person p = new Person (); p.id = "K123456789" ; p.name = "Jack" ; p.gender = " 男⽣ " ; p.age= 25 ; TrainingCenter t = new TrainingCenter (); Employee e1 = t.giveTraining ( p , " PROGRAMMER " ); System.out.println(e1); } } 執⾏結果 null enum EmployeeType { Programmer , Artist , Tester } class TrainingCenter{ Employee giveTraining ( Person p , EmployeeType type ){ Employee e = null ; if ( type == EmployeeType.Programmer ) e = new Programmer (); if ( type == EmployeeType.Artist ) e = new Artist (); if ( type == EmployeeType.Tester ) e = new Tester (); if ( e != null ){ e.id = p.id; e.name = p.name; e.gender = p.gender; e.age = p.age; } return e; } } class Main { public static void main( String [] args){ Person p = new Person (); p.id = "K123456789" ; p.name = "Jack" ; p.gender = " 男⽣ " ; p.age= 25 ; TrainingCenter f = new TrainingCenter (); Employee e1 = f.giveTraining (p, EmployeeType.Programmer); Employee e2 = f.giveTraining (p, EmployeeType.Artist); Employee e3 = f.giveTraining (p, EmployeeType.Tester); System.out.println(e1); System.out.println(e2); System.out.println(e3); } } 執⾏結果 Programmer@10b30a7 Artist@1a758cb Tester@1b67f74 J10_1_1 - TrainingCenter.java 1. 這是訓練中⼼類別( TrainingCenter )。 J10_1_2 - Main.java 2. 透過訓練⽅法( giveTraining() )將新進的⼈員 Person ),訓練成特定類型的員⼯( Employee )。⼈員 將由 p 參數代入,⽽員⼯類型將由 type 參數指定。 3. 設⼀個 e 變數,以存放訓練後的員⼯( Employee ), 預設為 null 表⽰沒有任何被訓練的員⼯物件。 3. 因為程式設計師的英⽂以全⼤寫 -“PROGRAMMER” 的⽅式輸入,與 訓練⽅法( giveTraining() )中的 “Programmer” 不相符,造成訓 練⽅法無法成功找到對應的員⼯類型,因此傳回 null 表⽰沒有任何訓 練後的員⼯物件被建立。當然,最後會以 null 的回傳值進⾏列印。 4. 依照傳入的字串作為建立員⼯的依據。 “Programmer” 建立程 式設計師、 “Artist” 建立美⼯⼈員、 “Tester” 建立測試⼈員。 5. t 不為 null ,則表⽰已訓練出⼀位特定類型的員⼯, ⽽後將⼈員物件上的資料轉⾄此員⼯物件上。(存此暫不配 置員⼯⼯號( employeeID 與薪資( salary ))。 6. 回傳建立的員⼯物件,但若要求建立的員⼯類型不存在(即不為 Programmer Artist Tester ),即不建立員⼯物件,並以 null 的⽅式回傳。 7. 建立⼈員物件( Person )。 8. 建立訓練中⼼( TrainingCenter )。 9. 透過訓練⽅法( giveTraining() ), 將傳入的⼈員訓練成特定的員⼯。 J10_1_1 - Main.java 7. 建立⼈員物件( Person )。 8. 建立訓練中⼼( TrainingCenter )。 J10_1_3 - EmployeeType.java 1. enum enumeration 的縮寫,即表⽰列舉的意思。 2. 這是為列舉所取的名稱,叫做員⼯類型 -EmployeeType 3. 將員⼯的類型以⽂字的⽅式依序列⽰,分別為程式設計師 -”Programmer” 、美 ⼯⼈員 ”Artist” 與測試⼈員 -”Tester” 。員⼯類別是以逗號( , )的⽅式隔開的。 J10_1_3 - TrainCenter.java J10_1_3 - Main.java . 訓練中⼼類別( TrainingCenter )有個訓練⽅法 giveTraining() ),除了傳入⼈員物件外( Person ),表⽰ 員⼯類型的參數型別將改由員⼯類型列舉( EmployeeType ),表 ⽰呼叫訓練⽅法時,必須傳入員⼯類型列舉型別的資料。 2. 宣告 e 變數以存放訓練後的員⼯物件( Employee )。 3. 只要比較傳入的員⼯類型項⽬,是不是為特定的員⼯類型項⽬,即可判斷傳 入的員⼯類型項⽬是哪⼀個類型的員⼯。例如:比較傳入的是不是程式設計師 Programmer ),只要判斷傳入值是否等於 Employee.Programmer 即可。 另外,列舉中的項⽬是以常數的概念表⽰,因此並不需要建立列舉項⽬的實體, 只要以 列舉名稱 . 列舉項⽬ 的⽅式,即可表⽰特定列舉的項⽬;也因為列舉 中的項⽬是固定,因此不會有因⼤⼩寫不同⽽無法比對成功的問題。 4. 判斷成功後(即為 true ),即可建立對應的程式設計師物件於 e 變數中。 5. 這是是否訓練成美⼯⼈員( Artist )與測試⼈員 Tester )判斷條件,同樣透過列舉項⽬進⾏判斷。 6. 建立⼈員物件( Perosn )。 7 建立訓練中⼼物件( TrainingCenter )。 8. 直接以員⼯類型列舉( EmployeeType )中的項⽬-程式設計 師( Programmer )、美⼯⼈員( Artist )或測試⼈員 Tester )指定需要建立員⼯的員⼯類型,同時,也因為列舉中 的項⽬是固定,因此不會有因⼤⼩寫不同⽽無法比對成功的問題。 因此可以精準的建立程式設計師、美⼯⼈員與測試⼈員的物件。 依照員⼯的類型, 將⼈員訓練為特定類型的員⼯ 1 2 3 1 2 3 不⼩⼼把申請訓練的員⼯類型寫錯了, 那不就訓練不出員⼯了嗎? 1 1 第1步, enum 製作員⼯類型列舉 2 步,依據員⼯類型建立員⼯物件 1 2 3 1 2 3

留言