1. Java中枚举类型的定义
Java语言中枚举类型是一种特殊的类,用于定义一组有限个数的常量。它的定义方式如下:
enum EnumName { CONSTANT1,
CONSTANT2,
...
}
其中,EnumName就是枚举类型的名称,CONSTANT1、CONSTANT2等则是枚举类型的成员。
通过使用枚举类型,可以方便地在代码中定义一些常量,避免在多处使用字符串或数字的情况下出现错误的情况。
2. 枚举类型的扩展
在Java语言中,枚举类型可以继承抽象类或实现接口,也可以添加成员变量和方法。但是,需要注意的是,在枚举类型中定义的成员都是静态的,因为枚举对象的数量是固定的。
下面是一个示例代码,演示了如何在枚举类型中添加成员变量和方法:
enum Operation { PLUS("+") {
double apply(double x, double y) { return x+y;}
},
MINUS("-") {
double apply(double x, double y) { return x-y;}
},
TIMES("*") {
double apply(double x, double y) { return x*y;}
},
DIVIDE("/") {
double apply(double x, double y) { return x/y;}
};
private final String symbol;
Operation(String symbol) {
this.symbol = symbol;
}
public String getSymbol() {
return this.symbol;
}
abstract double apply(double x, double y);
}
在这个示例代码中,枚举类型Operation实现了一个简单的计算器。每个枚举对象都表示一种运算符,通过apply(double, double)方法将两个数字进行运算。同时,每个枚举对象还拥有一个symbol成员变量,表示运算符的符号。在枚举类型的定义中,Operation继承抽象类,实现了apply(double, double)方法,实现了枚举类型的扩展。
2.1 实现接口
在上述示例中,Operation没有实现任何接口,我们来看一个示例,演示枚举类型如何实现接口:
interface Operation { double apply(double x, double y);
}
enum BasicOperation implements Operation {
PLUS("+") {
public double apply(double x, double y) { return x+y; }
},
MINUS("-") {
public double apply(double x, double y) { return x-y; }
},
TIMES("*") {
public double apply(double x, double y) { return x*y; }
},
DIVIDE("/") {
public double apply(double x, double y) { return x/y; }
};
private final String symbol;
BasicOperation(String symbol) {
this.symbol = symbol;
}
public String getSymbol() {
return this.symbol;
}
public double apply(double x, double y) {
throw new UnsupportedOperationException();
}
}
enum ExtendedOperation implements Operation {
EXP("^") {
public double apply(double x, double y) { return Math.pow(x, y); }
},
REMAINDER("%") {
public double apply(double x, double y) { return x % y; }
};
private final String symbol;
ExtendedOperation(String symbol) {
this.symbol = symbol;
}
public String getSymbol() {
return this.symbol;
}
abstract double apply(double x, double y);
}
在这个示例中,我们定义了一个接口Operation,包含一个用于计算的apply(double, double)方法。然后,我们定义了两个枚举类型,BasicOperation和ExtendedOperation。这两个枚举类型都实现了Operation接口。BasicOperation表示基本的四则运算,而ExtendedOperation表示一些扩展运算。
这个示例演示了Java中枚举类型可以实现接口的特性,使得枚举类型不仅可以表示一组有限个数的常量,还可以表示一组有限个数的常量的抽象和行为。
2.2 添加成员变量
不仅可以在枚举类型中添加方法,还可以添加成员变量。下面是一个示例代码:
enum Size { SMALL("S", 36, 18),
MEDIUM("M", 38, 20),
LARGE("L", 40, 22),
EXTRA_LARGE("XL", 42, 24);
private final String abbreviation;
private final int waist;
private final int inseam;
Size(String abbreviation, int waist, int inseam) {
this.abbreviation = abbreviation;
this.waist = waist;
this.inseam = inseam;
}
public String getAbbreviation() {
return this.abbreviation;
}
public int getWaist() {
return this.waist;
}
public int getInseam() {
return this.inseam;
}
}
这个示例展示了如何在枚举类型中添加成员变量。在这个示例中,枚举类型Size包含了三个成员变量,分别表示尺寸的缩写、腰围和内长。在枚举类型的定义中,我们通过构造函数对这些成员变量进行初始化,并提供了相应的get方法。
2.3 枚举类型的注意事项
在使用枚举类型时,需要注意以下几点:
1. 枚举类型中定义的成员都是静态的,因为枚举对象的数量是固定的。
2. 在枚举类型的定义中,枚举对象必须写在最前面,并以分号结尾。
3. 枚举对象可以在枚举类型中定义方法或成员变量,但需要注意它们不能是 abstract 或 transient 类型。
4. 枚举对象还可以被定义为匿名内部类。
3. Enum类的介绍
在Java中,所有枚举类型都是由Enum类派生而来的,Enum类为所有枚举类型提供了一些通用的方法和属性,使得枚举类型可以更加方便地使用。
3.1 values()方法
values()方法是一个静态方法,用于返回枚举类型中的所有成员。这个方法返回的数组是按照枚举对象在代码中定义的顺序排列的。
下面是用法的一个示例代码:
for (Size size : Size.values()) { System.out.println(size.getAbbreviation());
}
这个示例代码演示了如何使用values()方法遍历枚举类型Size中的所有成员。在每次循环中,size变量都会取到Size中的一个枚举成员。
3.2 valueOf()方法
与values()方法类似,valueOf()方法也是一个静态方法,用于返回枚举类型中指定名称的枚举对象。如果指定的名称不存在,valueOf()方法会抛出IllegalArgumentException异常。下面是一个示例:
Size size = Size.valueOf("SMALL");System.out.println(size.getAbbreviation()); // S
这个示例代码演示了如何使用valueOf()方法获取枚举类型Size中指定名称的枚举对象。
3.3 ordinal()方法
ordinal()方法是Enum类中的一个方法,用于返回枚举对象在枚举类型中的索引位置,即声明时的位置,从0开始计数。使用ordinal()方法需要注意,在枚举值发生变更时,它的值也会发生变更,因此,不推荐将ordinal()方法作为持久化数据的存储方式。
下面是一个示例:
System.out.println(Size.SMALL.ordinal()); // 0System.out.println(Size.MEDIUM.ordinal()); // 1
System.out.println(Size.LARGE.ordinal()); // 2
System.out.println(Size.EXTRA_LARGE.ordinal()); // 3

这个示例代码演示了如何使用ordinal()方法获取枚举类型中枚举对象的索引位置。
4. Java枚举类型的应用场景
在实际开发中,Java的枚举类型经常被用于以下场景:
1. 表示一组有限个数的常量,例如在计算器程序中表示四则运算符号。
2. 表示状态的变化,例如在订单系统中表示订单的各种状态(已创建、已支付、已发货等)。
3. 数据库字段的类型安全性校验,例如在JPA中使用枚举类型代替字符串类型,保证类型安全。
5. 总结
本文介绍了Java枚举类型的定义、扩展和应用场景,并介绍了Enum类中的一些常用方法。在实际开发中,枚举类型的使用能够有效提高程序的可读性、可维护性和可扩展性。


