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); 
 } 
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值