作者AI3767 (星泉幼子)
看板java
标题Re: [问题] 如何让enum成为另一个enum的建构参数?
时间Fri Oct 14 00:38:24 2011
我不是很确定你所想要的需求是什麽
不同的需求, 架构写法会有所不同
这是大略猜想你所说的
粗略写一个样子, 和简单的测试
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)
1F:推 dream1124:谢谢 :) 这是一个很漂亮的解法~ 10/14 22:48