本文共 2903 字,大约阅读时间需要 9 分钟。
Java枚举有如下特点:
下面看一个简单的枚举类:
package com.faith.net;/** * 日期类型 */public enum DateType { DAY;}
上面的代码在编译后实际等同于:
public class DateType extends Enum { public static final DateType DAY; private DateType () {}}
可以把DateType看做一个类,而Day是DateType的一个实例。它的构造方法则是私有的。
枚举中也可以添加静态变量、静态方法和成员变量、成员方法:
public enum DateType { DAY; static int value; public static int getValue() { return value; } String name; public String getName() { return name; }}
我们把DateType看做一个类,静态变量和静态方法和普通类调用方式一样:
DateType.valueDateType.getValue()
成员变量和成员方法是每个类的实例才能调用的方法。而枚举类的实例就是它的域。所以调用枚举的成员变量和方法,通过如下方式:
DateType.DAY.nameDateType.DAY.getName()
枚举的每个实例(域)还可以重写枚举中的成员方法,类似于多态,如下:
public enum DateType { DAY { public Integer getValue() { return 0; } }; static Integer value = 1; public static Integer getValue() { return value; } String name; public String getName() { return name; }}
DAY中重写了getValue方法,重写前DateType.DAY.getValue()值为1,重写后则调用DAY中自己定制的getValue方法,结果为0。
还可以在枚举中添加抽象方法,强制所有实例(域)都实现各自的处理逻辑:
public enum DateType { DAY { @Override public String getText() { return null; } }, WEEK { @Override public String getText() { return null; } }; public abstract String getText(); // 抽象方法,强制所有实例实现}
强制实例必须实现方法还可以通过实现接口:
public interface NameEnum { String getName();}
public enum DateType implements NameEnum { DAY { @Override public String getName() { return null; } }, Week { @Override public String getName() { return null; } };}
枚举使用带参构造函数:
package com.faith.net;import java.util.HashMap;import java.util.Map;/** * 日期类型 * * @author hugende */public enum DateType { DAY("sdfsdf", 0) { @Override public String getText() { return null; } }, WEEK("sdf", 1) { @Override public String getText() { return null; } }; public abstract String getText(); String name; Integer age; DateType(String name, Integer age) { this.name = "s"; this.age = age; }}
访问方式如下:
DateType.DAY.name // 0DateType.WEEK.name // 1
枚举提供了values方法:
public class EnumTest { public static void main(String[] args) { DateType[] values = DateType.values(); for (DateType dateType : values) { System.out.println(dateType.age); } }}
Java强制枚举实现了Enum类,这个类的声明如下:
public abstract class Enum> implements Comparable , Serializable
可见其实现了Comparable、Serializable,支持了比较与序列化传输。
转载地址:http://gncol.baihongyu.com/