虽然知道在Java中存在枚举类型,但是却一直很少用。最近接触了一些,特加以总结。
枚举类型的定义
枚举类型是指由一组固定的常量组成合法值的类型。比如我们常用的:
public static final static ERROR = -1;
public static final static SUCCESS = 1;
根据枚举类型的定义,其实这也属于一种枚举,一种int枚举模式。这种模式存在类型安全性问题。如果你错把ERROR传入想要SUCCESS的方法中去,编译器也不会报错。
Java中的枚举
下面是一个简单的JAVA枚举类。
public enum PostLogisticsInfoEnum {
SUCCESS(1, "发布成功"),
ERROR(-1, "发布失败"),
TEST("测试");
//状态
private Integer state;
//信息
private String info;
PostLogisticsInfoEnum(Integer state, String info) {
this(info);
this.state = state;
}
PostLogisticsInfoEnum(String info) {
this.info = info;
}
public Integer getState() {
return state;
}
public String getInfo() {
return info;
}
public static PostLogisticsInfoEnum stateOf(int index) {
for (PostLogisticsInfoEnum infoEnum : values()) {
if (infoEnum.getState() == index) {
return infoEnum;
}
}
return null;
}
}
java枚举类特点
1、构造器默认使用private修饰符修饰(其它修饰符不被允许),这样可以看出枚举类都是单例的,即不允许外部类构造枚举对象。但是可以在枚举类内部定义多个枚举实例。
2、枚举类构造器和一般类一样,同样允许构造器的重载
3、 每个枚举类内部存在一个静态的values()方法,它返回一个包含全部枚举值的数组
java中枚举的优点:
1、Java枚举通过公有的静态final域为每个枚举常量导出实例的类。因为没有可以访问的构造器,枚举类型是真正的final。
2、枚举提供了编译时的类型安全。
3、允许添加任意的方法和域,并实现任意的接口。提供了所有Object方法的高级实现实现了Comparable和Serializable接口,并针对枚举类型的可任意改变性设计了序列化方式。