Java枚举类型总结

Java 1.5以后,有了枚举类型:

简单描述一下enum的特性:

  • enum和class、interface的地位一样
  • 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。
  • 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
  • 枚举类的构造器只能是私有的。

在一些业务逻辑中,一般程序员可能定义status,type字段为 String 或者 int,这样容易出错而不好懂,最好的方式是定义成enum;

适用场景:

  1. 表中的状态字段,都可以设计为枚举类型,如status,type等
  2. 业务逻辑中的策略规则信息、异常码类型、权限码功能等;

用法一:简单的定义

以下是最简单的定义:

public enum Color { 
 RED, GREEN, BLANK, YELLOW 
} 

用法二:可以在switch语句中使用,Java 6 之前的switch语句支持且仅支持int,char,enum类型。而使用enum无疑是可读性最强的一种。

enum Signal { 
 GREEN, YELLOW, RED 
} 
public class TrafficLight { 
 Signal color = Signal.RED; 
 public void change() { 
 switch (color) { 
 case RED: 
 color = Signal.GREEN; 
 break; 
 case YELLOW: 
 color = Signal.RED; 
 break; 
 case GREEN: 
 color = Signal.YELLOW; 
 break; 
 } 
 } 
} 

用法三:向枚举中添加新方法

向枚举类型添加自定义方法,必须先定义enum实例,并且需要在enum实例序列中添加一个分号。

public enum Color { 
 //这个枚举的实例 
 RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); 
 // 成员变量 
 private String name; 
 private int index; 
 // 构造方法 ,只能私有
 private Color(String name, int index) { 
 this.name = name; 
 this.index = index; 
 } 
 // 普通方法 
 public static String getName(int index) { 
 for (Color c : Color.values()) { 
 if (c.getIndex() == index) { 
 return c.name; 
 } 
 } 
 return null; 
 } 
 // get set 方法 
 public String getName() { 
 return name; 
 } 
 public void setName(String name) { 
 this.name = name; 
 } 
 public int getIndex() { 
 return index; 
 } 
 public void setIndex(int index) { 
 this.index = index; 
 } 
} 

用法四:为了增加可读性和灵活性,可以覆盖枚举一些默认方法,而toString无疑是最常被客制化的。

public enum Color { 
 RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); 
 // 成员变量 
 private String name; 
 private int index; 
 // 构造方法 
 private Color(String name, int index) { 
 this.name = name; 
 this.index = index; 
 } 
 //覆盖方法 
 @Override 
 public String toString() { 
 return this.index+"_"+this.name; 
 } 
} 

用法五:实现接口

枚举继承自java.lang.Enum类,由于Java不支持多继承,所以枚举对象无法继承其他类,但枚举依然可以通过接口实现泛化。

public interface Behaviour { 
 void print(); 
 String getInfo(); 
} 
public enum Color implements Behaviour{ 
 RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); 
 // 成员变量 
 private String name; 
 private int index; 
 // 构造方法 
 private Color(String name, int index) { 
 this.name = name; 
 this.index = index; 
 } 
//接口方法 
 @Override 
 public String getInfo() { 
 return this.name; 
 } 
 //接口方法 
 @Override 
 public void print() { 
 System.out.println(this.index+":"+this.name); 
 } 
} 
### Java 枚举类型的概述 Java 枚举类型是一种特殊的类,用于表示一组固定的常量集合。通过 `enum` 关键字定义的枚举类型不仅限于简单的常量列表,还可以包含字段、方法以及实现接口等功能[^2]。 #### 定义枚举类型 以下是定义枚举类型的通用语法: ```java public enum EnumName { CONSTANT_ONE, CONSTANT_TWO, CONSTANT_THREE; } ``` 在此基础上,可以通过添加构造函数、字段和方法进一步扩展枚举的功能。例如: ```java public enum Planet { MERCURY(3.30E23, 2.44E6), VENUS(4.87E24, 6.052E6); private final double mass; // 千克单位的质量 private final double radius; // 米单位的半径 Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } public double getMass() { return mass; } public double getRadius() { return radius; } } ``` 此示例展示了如何为每个枚举常量关联额外的信息,并提供获取这些信息的方法[^1]。 #### 使用枚举类型 在实际应用中,可以直接引用枚举常量或将其作为参数传递给方法。以下是一个简单例子展示如何判断当前天是否为周日: ```java package com.java.enumTest; public class Main { public static void main(String[] args) { Weekday today = Weekday.SUNDAY; if (today == Weekday.SUNDAY) { System.out.println("It's SUNDAY, time to party!"); } else { System.out.println("It's not SUNDAY, just a regular day."); } } } // 定义Weekday枚举 enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } ``` 这段代码说明了如何创建并使用一个名为 `Weekday` 的枚举类型来代表一周中的每一天[^3]。 #### 枚举的优势 相比传统的静态常量方式,使用枚举有诸多优势: - **安全性**:编译期即可检测非法值。 - **可读性**:使代码更清晰易懂。 - **功能性**:支持复杂逻辑处理,如重载方法和实现接口[^2]。 ### 总结 综上所述,Java 枚举不仅是用来替代整数或者字符串常量的有效工具,而且能够承载更多业务逻辑,从而提升程序质量与灵活性[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值