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()); // 0
System.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
类中的一些常用方法。在实际开发中,枚举类型的使用能够有效提高程序的可读性、可维护性和可扩展性。