java枚举使用要注意的几点:
①构造器必须为private,以保证只能在内部访问
②enum常量必须定义在其他域和方法的前面
常用的一些方法:
toString():返回enum实例声明时的名字(效果同name())
ordinal():返回enum常量的声明顺序(从0开始)
static values():按enum常量声明的顺序产生由这些实例构成的数组
enum Spiciness{
// 枚举列表必须写在最前面,否则编译出错
NOT("not") {
@Override
public Spiciness nextOne() {//实现抽象方法
return MILD;
}
},MILD("mild") {
@Override
public Spiciness nextOne() {
return MEDIUM;
}
},MEDIUM("medium") {
@Override
public Spiciness nextOne() {
return HOT;
}
},HOT("hot") {
@Override
public Spiciness nextOne() {
return FLAMING;
}
},FLAMING("flaming") {
public Spiciness nextOne() {
return NOT;
}
};
private String description;
//构造器默认也只能是private, 从而保证构造函数只能在内部使用
private Spiciness(String description){
this.description=description;
}
public String getDescription(){
return description;
}
//也可以声明abstract方法
public abstract Spiciness nextOne();
}
public class SimpleEnumUse {
public static void main(String[] args) {
for(Spiciness s:Spiciness.values()){
System.out.print(s.getDescription()+" ");
System.out.println(s.nextOne().getDescription());
}
Spiciness howhot=Spiciness.MEDIUM;
System.out.println(howhot.ordinal());//返回顺序
System.out.println(howhot.name());//返回name
System.out.println(howhot.toString());//同上
System.out.println(howhot.equals(Spiciness.MEDIUM));
System.out.println(howhot==Spiciness.MEDIUM);
Spiciness[] a=Spiciness.values();
for(Spiciness s:a){
System.out.println(s);
}
}
}
根据枚举 私有构造器特点,如果设想枚举常量只有一个时(单实例),可以由其实现单例模式。Have a try!