Java基础知识整理3:Enum
Java基础知识整理3:Enum
JDK描述
public abstract class Enum<E extends Enum
extends Object
implements Comparable, Serializable
这是所有 Java 语言枚举类型的公共基本类。
Enum使用
http://www.ibm.com/developerworks/cn/java/j-lo-enum/
- 作用:将一组类似的值包含到一种类型当中。Java常量也可以实现
public static class RainbowColor {
public static final int RED = 0;
}
但是,有几个缺点:接收颜色的方法接收一个int型,如果传任意的int值会造成错误;必须通过类来访问;
- 定义和使用
public enum Colors {
//必须写在首行
RED(200,"RED_COLOR"),
YELLOW(201,"YELLOW_COLOR"),
BLACK(202,"BLACK_COLOR");
int color;
String colorName;
private Colors(int color,String name){
this.color=color;
this.colorName=name;
}
public String getColorName() {
return this.colorName;
}
}
//直接使用
System.out.println("RED"==Colors.RED.getColorName());
//switch
switch(today) {
case BLACK: break;
case RED: break;
case YELLOW: break;
}
- 相关工具类
//1.EnumSet遍历枚举
for(Colors day : EnumSet.range(Colors.RED, Colors.BLACK)) {
System.out.println(day);
}
//2.EnumMap,将枚举作为key,
//EnumMap的可以必须是Enum类型,在put时调用typeCheck(key);进行检查,必须是传入的Colors.class
Map<Colors, Integer> schema = new EnumMap<Colors, Integer>(Colors.class);
public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
代码分析
Enum实现接口
- Comparable接口用来进行比较
- Serializable 序列化
Enum的变量
- private final String name; 枚举的名字,如上面的Colors.RED的名字为"RED"
- private final int ordinal; 枚举的index
字符数组和offset及count都是final的,必须在构造方法中初始化,之后不能修改。
构造方法
- protected Enum(String name, int ordinal) 构造方法是protected不能通过构造函数创建
RED(200,"RED_COLOR"),
YELLOW(201,"YELLOW_COLOR"),
BLACK(202,"BLACK_COLOR");
定义枚举变量时会调用枚举的构造方法,传入(RED,0)/(YELLOW,1)/(BLACK,2)
enum Type{
A,B,C,D;
}
//编译器会进行处理,相当于
class Type extends Enum{
public static final Type A;
public static final Type B;
...
}
其他方法
- public final String name() 获取枚举的名字 Colors.YELLOW为"YELLOW"
- public final int ordinal() 获取枚举的名字 Colors.YELLOW为1
- public final int compareTo(E o) 比较两个枚举
- values(); Colors.values()返回一个Colors的数组
相关问题
利用枚举实现单例模式
- 单元素的枚举类型已经成为实现Singleton的最佳方法。
class Resource{
}
public enum SomeThing {
INSTANCE;
private Resource instance;
SomeThing() {
instance = new Resource();
}
public Resource getInstance() {
return instance;
}
}
SomeThing.INSTANCE.getInstance()即可获得单例
总结
- 自定义的Enum可以指定类型和其他遍历,在定义Enum的中创建该类型的多个变量
- 两个工具类:EnumSet遍历枚举,EnumMap保存枚举映射对象
- [枚举单例]http://blog.csdn.net/yy254117440/article/details/52305175
浙公网安备 33010602011771号