一,基本enum特性
1,values()返回enum实例的数组,而且该数组的元素保持其在enum中声明时的顺序。
2,枚举类型允许添加任意的方法和域,这样就可以为每个枚举实例添加详细描述。为此,我们可以提供一个构造器,专门负责处理这个信息。
注意:如果打算定义自己的方法,那么必须在enum实例序列的最后一个添加分号。同时,java要求必须先定义enum实例。
举例代码如下
@Getter
@Setter
public enum ErrorCode {
ERROR_CODE1(1,"信息错误"),
ERROR_CODE2(2,"来源错误");
private int code;
private String message;
ErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
}
三,使用接口组织枚举
我们是无法从enum继承子类。对于enum而言,实现接口是使其子类化的唯一办法。
effectice java中的示例如下
public enum ExtendOperation implements Operation{
PLUS("+"){
public double apply(double x,double y){
return x+y;
}
},
MINUS("-"){
public double apply(double x,double y){
return x-y;
}
};
private String symbol;
ExtendOperation(String symbol) {
this.symbol = symbol;
}
}
public class Test {
public static void main(String[] args) {
double x = Double.parseDouble("1");
double y = Double.parseDouble("2");
test(Arrays.asList(ExtendOperation.values()),x,y);
}
private static void test(Collection<? extends Operation> opSet, double x, double y) {
for(Operation op : opSet){
System.out.println(op.apply(x,y));
}
}
}
四,使用EnumSet替代标志
EnumSet的出现是为了替代传统的基于"int"的位标志。EnumSet集位域的简洁和性能优势于一身。示例如下
public class Text {
public enum Style{
BOLD,ITALIC,UNDERLINE
}
public void applyStyles(Set<Style> styles){
}
}
text.applyStyles(EnumSet.of(Style.OLE,Style.ITALIC));
五,使用EnumMap
EnumMap是一种特殊的Map,它要求其中的key必须来自一个enum.EnumMap内部由数组实现,所以查找速度很快。
六,常量相关方法
常量相关的方法,我们为enum定义一个或多个abstract方法,然后为每个enum实例实现该抽象方法。通过常量相关方法,每个enum实例可以具备自己独特的行为。每个enum实例就相当于一个独特的类。