Re: [問題] 如何讓enum成為另一個enum的建構參數?

看板java作者 (星泉幼子)時間14年前 (2011/10/14 00:38), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
我不是很確定你所想要的需求是什麼 不同的需求, 架構寫法會有所不同 這是大略猜想你所說的 粗略寫一個樣子, 和簡單的測試 import java.util.*; enum Role { Citizen(1), Guard(2), King(3), Queen(4), Slime(5), Mouse(6); private int roleID = -1; Role(int id) { roleID = id; } public int getID() { return roleID; } } //{END enum} Role enum GameMode { Practice(Role.Guard, Role.Slime), Competition(Role.Citizen, Role.Guard, Role.Slime, Role.King, Role.Queen); private List<Role> MEMBERS; GameMode(Role... roles) { MEMBERS = Collections.unmodifiableList(Arrays.asList(roles)); } //{END constructor} public List<Role> getRoles() { return MEMBERS; } } //{END enum} GameMode class GameWorld { public static void main(String[] args) { GameMode mode1 = GameMode.Practice; GameMode mode2 = GameMode.Competition; show(mode2); System.out.println("take a break ..."); show(mode1); System.out.println("about mode11 ..."); GameMode mode11 = GameMode.Practice; List<Role> testList = mode11.getRoles(); try { // Try to add a "Mouse" role testList.add(Role.Mouse); } catch(UnsupportedOperationException uoe) { System.out.println("invalid operation is detected."); } show(mode11); } //{END main} static void show(GameMode m) { switch (m) { case Practice: System.out.println("This is Practice"); break; case Competition: System.out.println("This is Competition"); break; } for(Role r: m.getRoles()) { System.out.println("role: "+ r.toString() + " id:"+r.getID()); } } //{END} show() } //{END class} GameWorld -- ※ 發信站 :批踢踢實業坊(ptt.cc) ◆ From: 140.123.105.149 ※ 編輯: AI3767 來自: 140.123.105.149 (10/14 00:40)

10/14 22:48, , 1F
謝謝 :) 這是一個很漂亮的解法~
10/14 22:48, 1F
文章代碼(AID): #1EbnG3Eh (java)
文章代碼(AID): #1EbnG3Eh (java)