💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 简介 用enum关键字 枚举类,他相当于一个类继承了Enum类而已 ~~~ public abstract class Enum<E extends Enum<E>> extends object implements Comparable<E>, Serializable ~~~ Enum是一个抽象类,里面定义的构造如下 ~~~ protected Enum(String name, int ordinal) ~~~ Enum类的构造方法依然是被封装的,所以也属于构造方法私有化的应用,多例设计的前提构造方法私有化 在Enum类里面定义了2个方法: * 取得枚举的名字(public final String name()) * 取得枚举的索引(public final int ordinal()) 还有一个values()方法,他把枚举对象以对象数组的形式全部返回 ## 案列 ~~~ package com.study; enum Color { RED, GREEN, BLUE; } public class HelloWorld { public static void main(String[] args) { Color red = Color.RED; System.out.println(red); //RED for (Color c : Color.values()) { System.out.println(c.ordinal() + "-" + c.name()); } /* 输出 0-RED 1-GREEN 2-BLUE */ } } ~~~ # 请解释enum和Enum的区别? * enum是一个关键字,而Enum是一个抽象类 * 使用enum定义的枚举就相当于一个类继承了Enum这个抽象类 # 定义其他结构 ## 多例 * 枚举之中定义的构造方法不能够使用public声明,如果没有无参构造请手工调用构造传递参数 * 枚举对象必须 放在首行,随后才可以定义属性,构造,普通方法 ### 案例 ~~~ package com.study; enum Color { RED("红色"), GREEN("蓝色"), BLUE("绿色"); private String title; //属性 //这边构造方法只能private修饰 private Color(String title) { this.title = title; } public String toString() { return this.title; } } public class HelloWorld { public static void main(String[] args) { for (Color c : Color.values()) { System.out.println(c); } } } ~~~ 输出 ~~~ 红色 蓝色 绿色 ~~~ ## 可以实现接口 ~~~ package com.study; interface Message { public String getTitle(); } enum Color implements Message{ RED("红色"), GREEN("蓝色"), BLUE("绿色"); private String title; //属性 //这边构造方法只能private修饰 private Color(String title) { this.title = title; } public String toString() { return this.title; } @Override public String getTitle() { return this.title; } } public class HelloWorld { public static void main(String[] args) { Message msg = Color.RED; System.out.println(msg); } } ~~~ 输出 ~~~ 红色 ~~~ ## 在每个对象后面使用匿名内部类 ~~~ package com.study; interface Message { public String getTitle(); } enum Color implements Message { RED("红色") { public String getTitle() { return "自己的" + this; } }, GREEN("蓝色") { public String getTitle() { return "自己的" + this; } }, BLUE("绿色") { public String getTitle() { return "自己的" + this; } }; private String title; //属性 //这边构造方法只能private修饰 private Color(String title) { this.title = title; } public String toString() { return this.title; } } public class HelloWorld { public static void main(String[] args) { Message msg = Color.RED; System.out.println(msg.getTitle()); } } ~~~ 输出 `自己的红色` ## 在枚举中定义抽象方法并覆写 此时每个枚举必须覆写抽象方法 ~~~ package com.study; enum Color { RED("红色") { @Override public String getTitle() { return "自己的" + this; } }, GREEN("蓝色") { @Override public String getTitle() { return "自己的" + this; } }, BLUE("绿色") { @Override public String getTitle() { return "自己的" + this; } }; private String title; //属性 //这边构造方法只能private修饰 private Color(String title) { this.title = title; } public String toString() { return this.title; } //定义抽象方法 public abstract String getTitle(); } public class HelloWorld { public static void main(String[] args) { System.out.println(Color.RED.getTitle()); } } ~~~ 输出 `自己的红色` # 枚举的作用 可以在switch上使用 ~~~ enum Color { RED, GREEN, BLUE; } public class HelloWorld { public static void main(String[] args) { Color c = Color.RED; //支持枚举判断 switch (c) { case RED: System.out.println("这是红色"); break; case GREEN: System.out.println("这是绿色"); break; case BLUE: System.out.println("这是蓝色"); break; } } } ~~~