2012-04-20 100 views
2


我可以在兩個枚舉中創建一個enum(在switch語句中使用的常量)嗎?
喜歡的東西...添加枚舉值?

public class Test{ 

    public enum WorkDay {Monday, Tuesday, Wednesday, Thursday,Friday}; 
    public enum WeekEndDay {Sunday, Saturday}; 

    // it doesn't work): 
    public enum Day{WorkDay.values(),WeekEndDay.values()}; 

    public static void Action(Day d) { 

     switch(d){ 
      case Monday: 
       ...; 
       break; 
      case Tuesday: 
       ...; 
       break; 
      case ...: 
       ...; 
       break; 
      case Saturday: 
       ...; 
       break; 
     } 
    } 
} 

任何想法???我真的想用開關,並已分開枚舉 謝謝!

回答

10

號您可以創建一個Day枚舉和明確列表中的每個值,每種類型提供一個構造函數,以及...但我個人會使用:

public enum Day { 
    MONDAY(true), 
    TUESDAY(true), 
    WEDNESDAY(true), 
    THURSDAY(true), 
    FRIDAY(true), 
    SATURDAY(false), 
    SUNDAY(false); 

    private final boolean workDay; 

    private Day(boolean workDay) { 
     this.workDay = workDay; 
    } 

    public boolean isWorkDay() { 
     return workDay; 
    } 
} 

然後你可以爲工作日發佈EnumSet<Day>,另一個爲非工作日。

+0

不知道EnumSet。每天學習一些東西。 – 2012-04-20 13:26:12

0

由於WorkDay,WeekEndDay和Day都是不同的類,所以不能組合Enums。 你能做的最好的是:

public enum Day { 
    Monday(false), 
    Tuesday(false), 
    Wednesday(false), 
    Thursday(false), 
    Friday(false), 
    Saturday(true), 
    Sunday(true); 
    private boolean isWeekendDay; 
    private Day(boolean isWeekendDay) { 
     this.isWeekendDay = isWeekendDay; 
    } 
    public boolean isWeekendDay() { 
     return isWeekendDay; 
    } 
} 
0

有效Java有枚舉,可滿足您的要求一個很好的例子。作者向你提出了戰略模式。代碼可以是這樣的:

// The strategy enum pattern 
enum SomeActionDay { 
    MONDAY(DayActionType.WEEKDAY), TUESDAY(DayActionType.WEEKDAY), 
    WEDNESDAY(DayActionType.WEEKDAY), THURSDAY(DayActionType.WEEKDAY), 
    FRIDAY(DayActionType.WEEKDAY), 
    SATURDAY(DayActionType.WEEKEND), SUNDAY(DayActionType.WEEKEND); 
private final DayActionType dayType; 
SomeActionDay(DayActionType dayType) { this.dayType = dayType; } 
return-type takeAction(parameters) { 
    return dayType.takeAction(parameters); 
} 
// The strategy enum type 
private enum DayActionType { 
WEEKDAY { 
return action(parameters) { 
//business logic for weekday. return value 
} 
}, 
WEEKEND { 
return action(parameters) { 
//business logic for weekday. return value 
} 
}; 

abstract returntype action(parameters); 

} 
}