【Java】Enumeration Class 枚举类
枚举类 enum 对象是有限的确定的、属于类的(静态的)
适合定义一组常量
例如固定的一些事物:
- 季节
- 性别
- 状态
自定义枚举类的使用
public class EnumerationTest {
/*
枚举类的使用
1 类的对象有限,确定的
2 适合定义一组常量
3 枚举只有一个对象就可以是单例模式的实现方式
*/
public static void main(String[] args) {
EnumerationClass status01 = EnumerationClass.STATUS01;
System.out.println(status01);
Integer statusID = status01.getStatusID();
}
}
// JDK5.0之前,编写我们自己的枚举类
// JDK5.0之后,使用enum关键字声明枚举类
class EnumerationClass{
// 自定义枚举类
private String statusName;
private Integer statusID;
// 私有化构造器,不可调用new 创建
private EnumerationClass(String statusName,Integer statusID){
this.statusName = statusName;
this.statusID = statusID;
}
// 声明我们的对象常量,这些对象允许被公开访问 public
public static final EnumerationClass STATUS01 = new EnumerationClass("枚举类状态对象01",1001);
public static final EnumerationClass STATUS02 = new EnumerationClass("枚举类状态对象02",1002);
public static final EnumerationClass STATUS03 = new EnumerationClass("枚举类状态对象03",1003);
public static final EnumerationClass STATUS04 = new EnumerationClass("枚举类状态对象04",1004);
// 属性的setter & getter
public String getStatusName() { return statusName; }
public void setStatusName(String statusName) { this.statusName = statusName; }
public Integer getStatusID() { return statusID; }
public void setStatusID(Integer statusID) { this.statusID = statusID; }
// toString 方法
@Override
public String toString() {
return "EnumerationClass{" +
"statusName='" + statusName + '\'' +
", statusID=" + statusID +
'}';
}
}
使用Enum声明枚举类:
public enum EnumerationClass {
// 枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
STATUS01("状态对象01",1001),
STATUS02("状态对象02",1002),
STATUS03("状态对象03",1003),
STATUS04("状态对象04",1004);
// 枚举对象也可以声明字段
private String enumName;
private Integer enumID;
// 枚举对象也可以有构造器,这个构造器不可被外界访问
EnumerationClass(String enumName, Integer enumID) {
this.enumName = enumName;
this.enumID = enumID;
}
// 也可以声明setter & getter
public String getEnumName() { return enumName; }
public void setEnumName(String enumName) { this.enumName = enumName; }
public Integer getEnumID() { return enumID; }
public void setEnumID(Integer enumID) { this.enumID = enumID; }
@Override
public String toString() {
return "EnumerationClass{" +
"enumName='" + enumName + '\'' +
", enumID=" + enumID +
'}';
}
}
Enum枚举父类 的常见方法
- values() 返回枚举类的对象数组,用来遍历所有枚举对象
- valueOf(String str)方法 ,获取字符串转换为枚举类的对象,字符串必须是对象的标识符,如果枚举类没有此字符枚举项,则发生不合理的参数异常
- toString()默认返回枚举对象名称
public class EnumerationTest {
public static void main(String[] args) {
// 根据参数名字返回枚举类的对应标识符的枚举对象,如果没有报不合理的参数异常
EnumerationClass status04 = EnumerationClass.valueOf("STATUS04");
System.out.println(status04);
// 返回这个枚举类的所有枚举对象 是一个对象数组
EnumerationClass[] instances = EnumerationClass.values();
// 遍历所有枚举对象 ,可以查看有哪些枚举项
for (EnumerationClass ec:instances) {
System.out.println(ec); // 调用的toString方法 默认返回对象的表示名称,可以重写
}
}
}
使用枚举类实现接口
- 因为enum枚举类已经继承了Enum枚举总抽象类,和Object原型类,不能在继承任何类了
- 但可以实现接口
public enum EnumerationClass implements Plug{ // 枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象 STATUS01("状态对象01",1001), STATUS02("状态对象02",1002), STATUS03("状态对象03",1003), STATUS04("状态对象04",1004); // 枚举对象也可以声明字段 private String enumName; private Integer enumID; // 枚举对象也可以有构造器,这个构造器不可被外界访问 EnumerationClass(String enumName, Integer enumID) { this.enumName = enumName; this.enumID = enumID; } // 也可以声明setter & getter public String getEnumName() { return enumName; } public void setEnumName(String enumName) { this.enumName = enumName; } public Integer getEnumID() { return enumID; } public void setEnumID(Integer enumID) { this.enumID = enumID; } @Override public String toString() { return "EnumerationClass{" + "enumName='" + enumName + '\'' + ", enumID=" + enumID + '}'; } @Override public void plugMethod() { System.out.println("实现接口方法!!!"); } } // 声明一个接口 interface Plug{ void plugMethod(); // 接口方法 }
除了在枚举类里面实现同一的接口方法
也可以匿名实现
public enum EnumerationClass implements Plug{
// 枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
STATUS01("状态对象01",1001){
@Override
public void plugMethod(){
System.out.println("匿名实现接口方法1");
}
},
STATUS02("状态对象02",1002){
@Override
public void plugMethod(){
System.out.println("匿名实现接口方法2");
}
},
STATUS03("状态对象03",1003){
@Override
public void plugMethod(){
System.out.println("匿名实现接口方法3");
}
},
STATUS04("状态对象04",1004){
@Override
public void plugMethod(){
System.out.println("匿名实现接口方法4");
}
};
// 枚举对象也可以声明字段
private String enumName;
private Integer enumID;
// 枚举对象也可以有构造器,这个构造器不可被外界访问
EnumerationClass(String enumName, Integer enumID) {
this.enumName = enumName;
this.enumID = enumID;
}
// 也可以声明setter & getter
public String getEnumName() { return enumName; }
public void setEnumName(String enumName) { this.enumName = enumName; }
public Integer getEnumID() { return enumID; }
public void setEnumID(Integer enumID) { this.enumID = enumID; }
@Override
public String toString() {
return "EnumerationClass{" +
"enumName='" + enumName + '\'' +
", enumID=" + enumID +
'}';
}
}
// 声明一个接口
interface Plug{
void plugMethod(); // 接口方法
}
分类:
【JavaSE】语言基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术