JAVA中enum的几种用法
来源:互联网 发布:网络神曲2014 编辑:程序博客网 时间:2024/06/08 19:00
用法一:enum可以用作常量
public enum Meiju(){ a,b,c}
用法二:enum可以和switch用
public enum Meiju(){ a,b,c}public class Demoswitch(){ public Meiju show(Meiju letter){ switch (letter) { case RED: letter = Meiju.a; return letter; case YELLOW: letter = Meiju.b; return letter; case GREEN: letter = Meiju.c; return letter; default: System.out.println("输入错误"); break; } return null; }}
用法三:可以向enum中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
public enum Meiju { A("a", 1), B("b", 2), C("c", 3), D("d", 4); private int index; private String name; // 构造方法 private Meiju(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Meiju c : Meiju.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 class test { public enum Meiju { A("a", 1), B("b", 2), C("c", 3), D("d", 4); // 成员变量 private String name; private int index; // 构造方法 private Meiju(String name, int index) { this.name = name; this.index = index; } // 覆盖方法 @Override public String toString() { return this.index + "_" + this.name; } } public static void main(String[] args) { System.out.println(Meiju.A.toString()); }}
方法五:实现接口
所有的枚举类型都继承java.lang.Enum类,java不支持多继承,so~~Enum不能继承其他类
public interface Jiekou(){ public void demo();}public enum Meiju implements Jiekou(){ A("a", 1), B("b", 2), C("c", 3), D("d", 4); // 成员变量 private String name; private int index; // 构造方法 private Meiju(String name, int index) { this.name = name; this.index = index; } //接口方法 public void demo(){ System.out.print(this.index + ":" + this.name); }}
方法六,接口组合枚举
public interface Demo { enum Meiju implements Demo { A, B, C } enum demo implements Demo { DEMOA, DEMOB, DEMOC }}
实现方式:Demo.Meiju.A; 或者 Demo.demo.DEMOA;
方法七,枚举集合
java.util.EnumSet和java.util.EnumMap是两个枚举集合,EnumSet保证不重复,EnumMap是Map中的Key是Enum类型,value可以是任意类型,具体查看jdk文档
枚举和常量定义的区别
比如赛车
常量定义:
public class Light { /* 车1 */ public final static int CAR1 = 1; /* 车2 */ public final static int CAR2 = 3; /* 车3 */ public final static int CAR3 = 2; }
枚举类型定义
public enum Light { // 利用构造函数传参 CAR1(1), CAR2(2), CAR3(3); // 定义私有变量 private int index; // 构造函数,枚举类型 只能是私有类型 private Light(int index) { this.index = index; } @Override public String toString() { return String.valueOf(this.index); }}
1,你会问:有什么不好了,大家都这样用了很长时间了,没什么问题啊。但是,首先,它不是类型安全的。你必须确保是int,其次,你还要确保它的范围,最后,很多时候你打印出来的时候,只有数字,但其没有看到代码的人并不知道你的企图,抛弃你所有旧的public static final常量
- 可以创建一个enum类,把它看做一个普通的类。除了它不能继承其他类了。(java是单继承,它已经继承了Enum),
可以添加其他方法,覆盖它本身的方法
switch()参数可以使用enum了
values()方法是编译器插入到enum定义中的static方法,所以,当你将enum实例向上转型为父类Enum是,values()就不可访问了。解决办法:在Class中有一个getEnumConstants()方法,所以即便Enum接口中没有values()方法,我们仍然可以通过Class对象取得所有的enum实例
无法从enum继承子类,如果需要扩展enum中的元素,在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组。达到将枚举元素进行分组。
使用EnumSet代替标志。enum要求其成员都是唯一的,但是enum中不能删除添加元素。
EnumMap的key是enum,value是任何其他Object对象。
enum允许程序员为eunm实例编写方法。所以可以为每个enum实例赋予各自不同的行为。
使用enum的职责链(Chain of Responsibility) .这个关系到设计模式的职责链模式。以多种不同的方法来解决一个问题。然后将他们链接在一起。当一个请求到来时,遍历这个链,直到链中的某个解决方案能够处理该请求。
使用enum的状态机
使用enum多路分发
- JAVA中enum的几种用法
- java 枚举(Enum)的几种用法
- java 中enum的用法
- java中enum的用法
- Java中Enum的用法
- Java中Enum列举的用法
- Java中Enum列举的用法
- java中枚举类型Enum的用法
- JAVA中enum的常见用法
- JAVA中enum的常见用法
- Java中enum的用法总结
- java中enum的用法总结
- java enum的用法
- java enum的用法
- Java enum的用法
- Java enum的用法
- java enum的用法
- Java中enum用法详解
- 冒泡排序
- SSH框架中关于Spring自动为Struts2的Action装配参数的误解
- 安卓改变状态栏颜色
- Editplus:使用技巧总结(打开当前文件路径、重命名、配置exe插件)
- git的常见相关命令和操作
- JAVA中enum的几种用法
- js+canvas五子棋
- VUE路由去掉“#”
- 【EXPDP】导出全部表的时候,选择不导出某个表
- CentOS 7下Mongodb副本集搭建
- 使用freeMark作为模板导出pdf
- 异常:Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentExceptio
- MySQL索引基础
- 基础练习 十进制转十六进制