Java 枚举怎么用

很多人刚接触Java的时候,总觉得“枚举”是个很“官方”的东西,离自己日常写代码很远——不就是几个固定的选项吗?用个普通的常量类、甚至直接写几个数字判断不也行?但其实,只要你写过需要限定选项的代码,就会发现枚举能帮你少踩很多坑。

先搞懂:什么是Java枚举?

说直白点,枚举就是把你需要的固定选项,提前一一列出来的“专属列表”。举个生活化的例子:你去食堂打饭,窗口只有三种固定的主食:米饭、面条、馒头,你不可能掏出10块钱说“我要个随便的主食”。这个“只有三种固定主食”的规则,放在Java里,就是一个枚举。

Java 枚举怎么用

普通常量的写法是啥样的?你可能会写:

`java

public static final int RICE = 1;

public static final int NOODLE = 2;

public static final int BUN = 3;

`

但这么写有个大问题:要是有人写了个4,比如int order = 4;,你没法拦他,代码跑起来可能会出bug。但枚举不一样,它会强制规定“只能用我列出来的选项”,一旦有人写了列表外的东西,编译就报错,从根源避免错误。

最基础的用法:直接用枚举存选项

先写个最简单的枚举,对应刚才的食堂主食:

`java

// 定义主食枚举,只有三个固定值

public enum Staple {

RICE, NOODLE, BUN

}

`

用的时候也特别简单,就像用一个新的变量类型:

`java

// 只能用这三个值,不能写别的

Staple myLunch = Staple.RICE;

`

要是有人写成Staple myLunch = Staple.Pizza;,编译器会直接标红——这就是枚举最基础的作用:把固定选项锁死,防止乱取值。

进阶用法:给枚举加“小属性”,满足更多需求

有时候光有个名字不够,比如你还想知道每种主食的价格,总不能单独写个常量对照表吧?这时候可以给枚举加自定义属性。

还是用食堂的例子,给每个主食加价格:

`java

public enum Staple {

// 三个选项,每个都带一个价格属性

RICE(2), NOODLE(3), BUN(1);

// 给枚举加的私有属性,存价格

private final int price;

// 枚举的构造方法,必须和选项的参数对应

Staple(int price) {

this.price = price;

}

// 加个get方法,方便外面拿价格

public int getPrice() {

return price;

}

}

`

用的时候就可以直接拿价格:

`java

// 拿馒头的价格

int bunPrice = Staple.BUN.getPrice(); // 结果是1

`

是不是比单独存常量清晰多了?要是你想加个“是否辣”的属性,也可以接着加,枚举能轻松容纳自定义信息。

实用场景:别再用“魔法值”判断了

很多新手写代码,会用数字判断分支,比如:

`java

int order = 1;

if (order == 1) {

System.out.println("吃米饭");

} else if (order == 2) {

System.out.println("吃面条");

}

`

这里的1、2就是“魔法值”,别人看代码根本不知道1和2对应啥。换成枚举就清楚多了,而且更安全:

`java

Staple order = Staple.NOODLE;

switch (order) {

case RICE:

System.out.println("吃米饭");

break;

case NOODLE:

System.out.println("吃面条");

break;

case BUN:

System.out.println("吃馒头");

break;

}

`

代码一眼就能看懂逻辑,还不会出现“把order写成4”的低级错误。

说白了,Java枚举不是什么复杂的技术,就是帮你把“固定的、有限的选项”管起来的工具——小到做状态判断,大到做配置管理,只要你有“只能从几个选项里挑”的需求,用枚举都能让代码更靠谱、更易懂。

上一篇 Swift语言从基础语法到实战开发,带你快速掌握iOS应用开发核心技能