一、分类枚举,分门别类罗列。
我们总有把东西分门别类罗列的需求,比如一个餐厅,菜单(meal)分为开胃食物(Appetizer)、主菜(MainCourse)、甜点(Dessert)、咖啡(Coffee)。为了让程序更直观,可以这样写:
public interface Food {
enum Appetizer implements Food {
SALAD, SOUP, SPRING_ROLLS;
}
enum MainCourse implements Food {
LASAGNE, BURRITO, PAD_THAI,
LENTILS, HUMMOUS, VINDALOO;
}
enum Dessert implements Food {
TIRAMISU, GELATO, BLACK_FOREST_CAKE,
FRUIT, CREME_CARAMEL;
}
enum Coffee implements Food {
BLACK_COFFEE, DECAF_COFFEE, ESPRESSO,
LATTE, CAPPUCCINO, TEA, HERB_TEA;
}
}
这样使用:
public static void main(String[] args) {
Food food = Food.Appetizer.SALAD;//开胃菜-->沙拉
food = Food.MainCourse.PAD_THAI;
}
这样便实现了将事物分门别类罗列的目的。
二、策略枚举、枚举的嵌套
引用《Effective Java》中有关文章,
考虑用一个枚举表示薪资包中的工作天数。这个枚举有一个方法,根据给定某工人的基本工资(按小时)以及当天的工作时间,来计算他当天的报酬。在五个工作日中,超过正常八小时的工作时间都会产生加班工资;在双休日中,所有工作都产生加班工资。利用switch 语句,很容易通过将多个 case 标签分别应用到两个代码片段中,来完成这一计算。为了简洁起见,这个示例中的代码使用了 double ,但是注意 double 并不是适合薪资应用程序的数据类型。
// Enum that switches on its value to share code - questionable
enum PayrollDay {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,
private static fi