学习笔记:Java 分类枚举和策略枚举(枚举的嵌套)

本文探讨了Java中的枚举使用,包括分类枚举以分门别类地组织信息,以及策略枚举的概念,后者通过枚举的嵌套避免了switch语句的维护风险。通过策略枚举,可以将工资计算策略抽象出来,形成独立的计算逻辑,提高代码的可维护性和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、分类枚举,分门别类罗列。


我们总有把东西分门别类罗列的需求,比如一个餐厅,菜单(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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值