Java枚举类型使用
平时我们在开发过程中,创建一个类的时候,会有如下四种:
- Class:类
- Interface:接口
- Enum:枚举
- Annotation:注解
今天主要介绍一下Enum(枚举)的使用。枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在日常生活中很常见,例如表示星期、颜色等都是一个枚举。类似这种当一个变量有几种固定可能得取值时,就可以将它定义为枚举类型。
概念
被enum关键字修饰的类型就是枚举类型。如果枚举不添加任何方法,枚举值默认从0开始的有序数值。使用枚举可以将常量组织起来,统一进行管理。枚举的本质是java.lang.Enum的子类。
方法
- values()返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
- name()返回实例名
- ordinal()返回实例声明时的次序,从0开始。
- valueOf()方法返回指定字符串值的枚举常量,不存在的会报错
情形一:枚举型常量
//枚举类 Java 枚举类使用 enum 关键字来定义
public enum ColorType {
//各个常量使用逗号" , "来分割,结尾使用分号";"结束。根据Java命名约定,建议我们用全大写字母命名常量
RED,WHITE,BLACK,BLUE;
}
//测试类
public class Test {
public static void main(String[] args) {
//1、values()返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
ColorType[] values = ColorType.values();
for (ColorType value : values) {
System.out.println(value);
//2、name()返回实例名
System.out.println(value.name());
//3、ordinal()返回实例声明时的次序,从0开始。
System.out.println(value.ordinal());
System.out.println("--------------");
}
//4、valueOf()方法返回指定字符串值的枚举常量,不存在的会报错
System.out.println(ColorType.valueOf("RED"));
System.out.println(ColorType.valueOf("YELLOW"));
}
}
结果打印如下:
情形二、带参数的枚举
//枚举类
public enum ColorType {
/**
* 枚举中的第一行应该是常量列表,然后是其他内容,如方法、变量和构造函数。
* Java不允许使用 = 为枚举常量赋值。enum可以通过方法来显式赋值
*/
RED("红色"),
WHITE("白色"),
BLACK("黑色"),
BLUE("蓝色");
private String name;
ColorType(String name){
this.name = name;
}
@Override
public String toString() {
return name;
}
}
//测试类
public class Test {
public static void main(String[] args) {
//1、values()返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
ColorType[] values = ColorType.values();
for (ColorType value : values) {
System.out.println(value);
//2、name()返回实例名
System.out.println(value.name());
//3、ordinal()返回实例声明时的次序,从0开始。
System.out.println(value.ordinal());
System.out.println("--------------");
}
//4、valueOf()方法返回指定字符串值的枚举常量,不存在的会报错
System.out.println(ColorType.valueOf("RED"));
System.out.println(ColorType.valueOf("红色"));
}
}
结果打印如下:
使用场景
if-else
public class Test {
public static void main(String[] args) {
//颜色中英文转换
String color = "红色";
if(ColorType.BLACK.toString().equals(color)){
System.out.println(color+"对应的英文是:"+ColorType.BLACK.name());
}else if(ColorType.RED.toString().equals(color)){
System.out.println(color+"对应的英文是:"+ColorType.RED.name());
}else if(ColorType.WHITE.toString().equals(color)){
System.out.println(color+"对应的英文是:"+ColorType.WHITE.name());
}else if(ColorType.BLUE.toString().equals(color)){
System.out.println(color+"对应的英文是:"+ColorType.BLUE.name());
}else{
System.out.println("没有该颜色");
}
}
}
结果打印如下:
switch-case
public class Test {
public static void main(String[] args) {
//颜色中英文转换
String color = "RED";
switch(color){
case "BLACK":
System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.BLACK.name()));
break;
case "RED":
System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.RED.name()));
break;
case "WHITE":
System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.WHITE.name()));
break;
case "BLUE":
System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.BLUE.name()));
break;
default:
break;
}
}
}
结果打印如下:
enum类改进
上述两种写法当enum中常量较多时显得代码过于冗余。我们可以利用values()方法对enum类进行改造
//枚举类
public enum ColorType {
/**
* 枚举中的第一行应该是常量列表,然后是其他内容,如方法、变量和构造函数。
* Java不允许使用 = 为枚举常量赋值。enum可以通过方法来显式赋值
*/
RED("RED","红色"),
WHITE("WHITE","白色"),
BLACK("BLACK","黑色"),
BLUE("BLUE","蓝色");
ColorType(String code, String name) {
this.code = code;
this.name = name;
}
private String code;
private String name;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getNameByCode(String code){
ColorType[] values = ColorType.values();
for(ColorType colorType:values){
if(code.equals(colorType.getCode())){
return colorType.getName();
}
}
return null;
}
public static String getCodeByName(String name){
ColorType[] values = ColorType.values();
for(ColorType colorType:values){
if(name.equals(colorType.getName())){
return String.valueOf(colorType.getCode());
}
}
return null;
}
}
//测试类
public class Test {
public static void main(String[] args) {
//颜色中英文转换
String color = "RED";
System.out.println(ColorType.getNameByCode(color));
}
}
结果打印如下: