Java 枚举类
在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 java 枚举类型 enum 可以更贴近地表示这种常量。
语法要求:
- 任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内;
- 多个枚举成员之间使用逗号分隔;要注意必须在枚举实例的最后一个成员后添加分号
注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。
示例1:
下面代码定义了一个表示性别的枚举类型 SexEnum 和一个表示颜色的枚举类型 Color。
public enum SexEnum {
male,female;
}
public enum Color {
RED,BLUE,GREEN,BLACK;
}
之后便可以通过枚举类型名直接引用常量,如 SexEnum.male、Color.RED。
Java 中的每一个枚举都继承自 java.lang.Enum 类。
当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例(如果枚举类中定义了抽象方法,则枚举类型成员必须重写该方法,如果定义了有参数构造方法,则枚举类型成员必须传入对应的参数),这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
所有枚举实例都可以调用 Enum 类的方法,常用方法如下:
| 方法名称 | 描述 |
|---|---|
| values() | 以数组形式返回枚举类型的所有成员 |
| valueOf() | 将普通字符串转换为枚举实例 |
| compareTo() | 比较两个枚举成员在定义时的顺序 |
| ordinal() |
获取枚举成员的索引位置,默认从0开始 |
| name() |
返回此枚举常量的名称,与在其枚举声明中声明的完全相同。 |
示例2:
import org.apache.commons.lang.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public enum DateFormatUtils {
/**
* 默认时间格式
*/
YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"),
YYYY_MM_DD_HH_MM("yyyy-MM-dd HH:mm"),
/**
* 时间格式,精确到天
*/
YYYY_MM_DD("yyyy-MM-dd"),
/**
* 没有标点符号
*/
YYYYMMDDHHMMSS("yyyyMMddHHmmss"),
YYYYMMDD("yyyyMMdd"),
YYYYMMDDHHMMSSSSS("yyyyMMddHHmmssSSS"),
YYYY_MM_DD_HH_MM_SS_SCORE("yyyy-MM-dd HH:mm:ss"),
HH_MM("HH:mm"),
MM_DD("MM-dd");
/**
* 时间格式转换实例
*/
private SimpleDateFormat format;
DateFormatUtils(String formatStr) {
format = new SimpleDateFormat(formatStr);
format.setLenient(false);
}
/**
* 时间对象转换成字符串
*
* @param date
* @return
* @author: chenjunsheng
* @date 2018年4月27日
*/
public String date2Str(Date date) {
if (date == null) {
return null;
}
return format.format(date);
}
/**
* 字符串转换成时间对象
*
* @param date
* @return
* @throws ParseException
* @author: chenjunsheng
* @date 2018/6/5
*/
public Date str2Date(String date) throws ParseException {
if (StringUtils.isBlank(date)) {
throw new NullPointerException("传进日期为空");
}
return format.parse(date);
}
public static void main(String[] args) {
System.out.println(DateFormatUtils.YYYY_MM_DD.date2Str(new Date()));// 2021-11-06
}
}

浙公网安备 33010602011771号