什么是枚举类型
- Java 枚举是一个特殊的类,一般表示一组常量,Java 枚举类使用 enum 关键字来定义,各个常量使用逗号来分割,
public static final
修饰的,最终以分号结束; - 默认继承了
java.lang.Enum
,实现了java.lang.Comparable
接口,且不能继承其他类,也不可以被继承。但枚举类可以实现一个或多个接口。 - 枚举类的所有实例必须放在第一行显示,不需要
new
出实例,不需显示调用构造方法。
4.构造方法:私有的,默认的就是private
/**
* <b>功能描述:颜色类型</b><br>
* @author newzhong
* @version 1.0.0
* @since JDK 1.8
*
* @Note
* <b>创建时间:</b> 2021-01-03 13:39
*/
public enum ColorEnum {
RED(1,"红色"),
YELLOW(2,"黄色");
private final Integer ColorCode;
private final String colorValue;
ColorEnum(Integer colorCode, String colorValue) {
ColorCode = colorCode;
this.colorValue = colorValue;
}
public Integer getColorCode() {
return ColorCode;
}
public String getColorValue() {
return colorValue;
}
}
为什么使用枚举类型
- 代码优雅,提高可以读性,和可扩展性
使用的静态常量过多时,会造成混淆,如果需要添加新的字段直接在enum类里添加变量
- 类型安全
private static final int RED = 1;
3.可以方便获取指定的变量,并且相当于一个接口。
4. 可以switch表达式中使用Enum定义的枚举类的对象作为表达式
枚举类的主要方法
方法名 | 返回类型 |
---|---|
values() | 返回当前枚举类的name属性,如果没有,则throw new java.lang.IllegalArgumentException() |
ordinal() | 方法可以找到每个枚举常量的索引,就像数组索引一样。 |
valueOf() 方法 | 返回指定字符串值的枚举常量。 |
应用场景:比如我们在数据库中存储的字段为
1
和2
等等,其中1为红色,2为黄色,通过sql从数据库中查出的就是integer,此时我们需要获取转化为对应的颜色,一般来说通过编写大量的if或switch语句就可以解决这个问题,但是代码的可读性非常低,并且,当很多模块到使用时,如果一个字段发生更改,改起来非常痛苦,考虑开闭原则,可以扩展性,使用枚举类型时不错的选择,下面编写的方法只需要传出对应的值就可以转化为对应得值
/**
* <b>功能描述:颜色类型</b><br>
* @author newszhong
* @version 1.0.0
* @since JDK 1.8
*
* @Note
* <b>创建时间:</b> 2021-01-03 13:39
*/
public enum ColorEnum {
/**属性及方法见上面*/
// 迭代获取,通过传入的code转为对应的颜色value
public static ColorEnum getValue(Integer colorCode){
// 调用 values()获取枚举常量对象
for (ColorEnum myVar : ColorEnum.values()) {
if (colorCode.equals(myVar.getColorCode())){
return myVar;
}
}
return null;
}
}
public class TestEnums {
public static void main(String[] args) {
ColorEnum value = ColorEnum.getValue(1);
// 查看索引ordinal()
int ordinal = value.ordinal();
System.out.println("index:"+ordinal);
String colorValue = value.getColorValue();
System.out.println(colorValue);
}
}
结果:
valueOf
:
// 返回指定字符串值的枚举常量。
ColorEnum red = ColorEnum.valueOf("RED");
String colorValue = red.getColorValue();
System.out.println(red+ ":" + colorValue);
不存在枚举常量时的结果:
// 返回指定字符串值的枚举常量。
ColorEnum red = ColorEnum.valueOf("RED11");
String colorValue = red.getColorValue();
System.out.println(red+ ":" + colorValue);
应用在Switch
语句
public static void main(String[] args) {
// 应用于 switch 语句
ColorEnum red = ColorEnum.RED;
switch(red) {
case RED:
System.out.println("红色啊");
break;
case YELLOW:
System.out.println("黄色啊啊啊");
break;
default:
System.out.println("无");
}
}