建议使用枚举抽象方法,好处:结构清晰,便于扩展。 枚举常量方法 最常见的星期一到星期日的常量,假设每天都需要打印不同的消息。 定义一个抽象方法,用于描述打印行为。...星期常量Override抽象方法,实现具体的打印细节。...该代码对外封装细节,仅提供了打印方法,使用此方法需要知道枚举常量对应的key值。如果知道枚举值,可直接调用打印方法。...页面根据不同枚举变量解析对应的含义; 2. 枚举变量在定义的时候,把key 定义为对应的含义。...WorkDaysName 页面直接展示:SUNDAY 的name:星期日 扩展 Java 枚举7常见种用法 java enum(枚举)使用详解 + 总结
枚举的定义 枚举关键字enum 枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也可以实现多个接口,但不能继承类。...枚举的使用 enum Color { RED, BLUE, GREEN; } Color color = Color.RED;//取用枚举中的值 枚举的使用场景 当变量只能从一堆固定的值中取出一个时...,那么就应该使用枚举。
使用枚举 values() 返回枚举类中所有的值。 ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。 valueOf()方法返回指定字符串值的枚举常量。...该方法为静态方法,调用者为枚举类,不是枚举值; 该方法形参只要一个String类型的值即可,并且该String值为枚举值对应的名称,即toString()方法返回的值(比如枚举类为SPRING,对应的名称就是..."SPRING"),所以肯定是需要双引号的; 扩展方法 compareTo(E o)方法:则是比较枚举的大小,注意其内部实现是根据每个枚举的ordinal值大小进行比较的。...name()方法与toString():几乎是等同的,都是输出变量的字符串形式。 getDeclaringClass(): 返回该枚举变量所在的枚举类。...//values()方法返回枚举类Week2.Week中指定索引的值 System.out.println(Week.values()[0]); 这个方法的话,values()方法如果不在后面使用[索引下标
枚举可以做什么 假设我们现在想表达星期,为了避免魔法值的出现,我们可能会写一个常量类: package com.tea.modules.java8.enums; /** * com.tea.modules.java8...使用抽象方法为每个枚举指定特定的行为 枚举不仅可以用来表示常量,有些时候,我们也可以将一些简单的计算逻辑写在枚举类中。...这个时候,可以使用抽象方法来定义每个枚举需要实现的行为. package com.tea.modules.java8.enums; import lombok.Getter; /** * com.tea.modules.java8...这个可以从反编译的文件中查看: 反编译 可以通过接口来让枚举实现一些通用的方法 定义一个接口,声明打印名字的能力 package com.tea.modules.java8.enums; /** *... * 不过,我们只能将 enum 的实例作为键来调用 put() 可方法,其他操作与使用一般的 Map 差不多。
枚举 类比单例模式,是一个特殊的类,可以实现接口。...但不能继承,不能用new实例化,内部提供有限数量的实例: package Note.enumDemo; interface Poem { void poem(); } // 枚举类型可以实现接口...,如果覆写的方法直接跟在内部实例后面那每个实例都可以表现出不同的行为, // 也可以定义在下面,让多个实例公用一个方法 public enum Season implements Poem{ /.../ 定义实例,必须放在最初,是public static final的 SPRING("春天") { @Override public void poem() {...values.length; i++) { System.out.println(values[i].toString()); } // 调用实例的方法
如何自定义枚举类 提供类的属性,声明为 private final 声明为 final 的属性,在构造器中初始化 通过公共方法(get)方法来调用属性 创建枚举类的对象:将类的对象声明 public static...values() 方法:返回所有值 valueOf() 方法:返回指定对象的值(要求传入的形参name是枚举类对象的名字) 否则,报 java.lang.IllegalArgumentException...:返回指定对象的值(要求传入的形参name是枚举类对象的名字) // 否则,报 java.lang.IllegalArgumentException 异常 String...枚举类实现接口 可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同。...:返回指定对象的值(要求传入的形参name是枚举类对象的名字) // 否则,报 java.lang.IllegalArgumentException 异常 String
使用Java枚举可以帮助我们有效地组织常量,并将其用于多种场景,提高代码的易用性和可重用性。如何使用Java枚举?...如何使用Java枚举中的常量值?...枚举中添加方法?...在Java枚举中,我们可以为每个常量值添加方法,以进一步组织和管理常量。...,并为枚举类型定义了一个getChineseName()方法,它可以返回当前枚举常量的中文名称。
前言 Java枚举在开发中是非常实用的。今天再来分析几个小技巧并且回答一些同学的的疑问。首先要说明的是我的枚举建立在以下的范式之中: ? 枚举统一接口范式 2....如何把枚举值绑定的下拉列表 这种场景非常常见,如果你把状态、类别等属性封装成枚举的结构,就像下面一样,一个标识对应一个状态,这是典型的下拉列表结构。...这里我有两个办法,第一个你可以从JSON 类库 Jackson 优雅序列化 Java 枚举类一文获得解决方案;第二种更加简单一些,写一个工具类就可以了。...没有对应的枚举。...总结 今天分享了两个小工具类来操作枚举,不光运用了枚举的一些知识,同时也使用了Java 8的三个新特性:泛型附加约束、Optional和Stream API。
如果按照这个逻辑,是否还可以为其添加另外的构造方法?答案是肯定的! ...如果我们冒然的提供 set 方法(外界可以改变其成员属性),好像是有点违背了设计的初衷。 那么,我们应该舍弃 set 方法,保留 get 方法。 ..._id; } } 可以看出,编译器淘气的为其构造方法加上了 private,那么也就是说,我们无法实例化枚举。 ...所有枚举类都继承了 Enum 类的方法,包括 toString 、equals、hashcode 等方法。 ...因为 equals、hashcode 方法是 final 的,所以不可以被枚举重写(只可以继承)。 但是,可以重写 toString 方法。 关于 Enum 源码,详见附录!
Java 枚举 枚举 enum 什么是枚举类: Java 枚举是一个特殊的类,一般表示一组常量 比如: 一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等… 类似这种当一个变量有几种固定可能的取值时..., 可以将它定义为枚举类型 出现: Java1.5 之前是没有 枚举 和 注解 的....JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象 作为表达式 case 子句可以直接使用枚举值的名字(无需添加枚举类作为限定) SeasonTest2.Java Season.Java...() 获取枚举成员的索引位置 enum 高级:implements实现类 enum 类继承了 java.lang.enum类 Java单根性所以不能在继承, 但Java 可以 多实现 eunm...在 Java 语言中和枚举类相关的,还有两个枚举集合类 java.util.EnumSet 和 java.util.EnumMap 使用 EnumSet 可以保证元素不重复,并且能获取指定范围内的元素
,可以在枚举类型中添加一些构造器、方法和域。...当然,构造器只是在构造枚举常量的时候被调用。所有的枚举类型都是 Enum 类的子类。它们继承了这个类的许多方法。其中最有用的一个是 toString() 方法,这个方法能够返回枚举常量名。...toString() 的逆方法是 valueOf() 静态方法。...每个枚举类型都有一个静态的 values() 方法,它将返回一个包含全部枚举值的数组。ordinal 方法返回 enum 声明中枚举常量的位置,位置从 0 开始计数。..., Integer typeId) { this.typeName = typeName; this.typeId = typeId; }}参考资料《Java核心技术卷一
case DIVIDE: return a / b; //break; //从java...语法的角度来看,因为该方法有返回值,所以default语句是必须的 //但从实际的语义来看,因为this代表的是枚举类的实例,而枚举类的实例是固定的,...abstract关键字将枚举类定义成抽象类(因为系统自动会为它添加abstract关键字),但因为枚举类需要显式创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则将出现编译错误...public double eval(double a, double b){ return a / b; } }; //为枚举类定义一个抽象方法...//这个抽象方法由不同的枚举值提供实现 public abstract double eval(double a, double b); public
// 递归实现指数型枚举 vector chosen; void calc(int x) { if (x == n + 1) { for (int i = 0; i < chosen.size..."); return; } calc(x + 1); chosen.push_back(x); calc(x + 1); chosen.pop_back(); } // 递归实现组合型枚举..."); return; } calc(x + 1); chosen.push_back(x); calc(x + 1); chosen.pop_back(); } // 递归实现排列型枚举...值 } int ret() { // 模拟计算机汇编指令ret int ret_addr = stack[top - 1]; top = stack[top]; // 恢复以前的top值 return...call(x + 1, 1); // 相当于calc(x + 1),返回后会从case 1继续执行 address = 0; continue; // 回到while循环开头,相当于开始新的递归
,和先前的多例设计code相比较,枚举可以完全简化的替代多例设计模式 枚举关键字 enum定义的枚举类实际上就是继承了 Enum 类的子类: Enum是一个抽象类;Enum类中定义了两个方法: ...values()方法,它将对象以对象数组的形式返回。...___________________________________________ 定义其他结构: 枚举之中定义的构造法方法,不可以使用public声明,必须构造私有化; 枚举对象必须放在首行...,其后才会定义属性、构造、方法; enum Color { RED("红色"),BLU("绿色"),GREEN("黄色"); //枚举对象定义在枚举类中的首行 private String... 枚举的使用根据个人是否习惯使用,不习惯使用的可以依旧使用多例设计模式
---- 特点 枚举类的构造器只能是私有的。 enum、class、interface的地位一样。 使用enum定义的枚举类默认继承了java.lang.Enum。 不可被继承。...使用原则 类的对象有限且固定。
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等,订单的状态。...enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。...values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中: values() 返回枚举类中所有的值。...ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。 valueOf()方法返回指定字符串值的枚举常量。...枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。 枚举类中的抽象方法实现,需要枚举类中的每个对象都对其进行实现。
参考链接: Java枚举构造函数 以下实例演示了Enum(枚举)构造函数及方法的使用: enum Car { lamborghini(900),tata(2),audi(50),fiat(15),... } }public class Main { public static void main(String args[]){ System.out.println("所有汽车的价格...; }} 以上代码运行输出结果为: 所有汽车的价格: lamborghini 需要 900 千美元。 tata 需要 2 千美元。 audi 需要 50 千美元。
enum 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java. lang.Enum类,而不是继承Object类,因此枚举类不能显式继承其他父类。...使用enum定义非抽象的枚举类时默认会使用final修饰,因此枚举类不能派生子类。...枚举类的构造方法只能使用private访问修饰符,如果省略,则默认使用private修饰;如果强制指定访问修饰符,则只能指定为private。...枚举类的所有实例必须在枚举类的类体第一行显式列出,否则该枚举类永远不能产生实例。列出的枚举实例默认使用public static final进行修饰。
Java:枚举类型----每博一文案师父说:人活一世,每个人都有他的特别,每个人都值得被温柔相待。...JDK 5.0 enum 定义枚举类在 Java 编程语言中,基于 JDK5.0 的前提下,您可以使用 enum 关键字定义枚举类型。...enum 类继承的不是 Object 类,而是 java.lang.Enum 类中的,所以 Season2.SPRING 枚举常量类中没有重写 toStirng()方法的前提下,调用的是 java.lang.Enum...这个方法和我们以前的方法是一样的。和普通 Java 类一样,枚举类可以实现一个或多个接口。若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。...JDK5.0 enum 定义的枚举类 的父类是 java.lang.Enum 抽象类,不是 Object 的类。
前言 枚举(enum)是 Java 语言的关键字之一,和 class 关键字一样,我们可以通过 enum 来定义一个枚举类,并在这个枚举类里面创建相关的枚举常量。...这篇文章里我们来看一下枚举在 Java 字节码层面是怎么表示的。...枚举类 我们来深入看一下 Java 编译器是怎么处理枚举的:在控制台上键入 javap -c TestEnum.class(类路径需要换成你自己的编译得到的类路径),即反编译查看 TestEnum.class...那么为什么在上面的枚举类 TestEnum 的字节码中我们没有看到构造方法呢?**我们可以猜到这正是编译器为了顾及枚举的特性而将构造方法去除(或者说用别的方法代替)的体现。...至此我们可以得出结论了:对于枚举类来说,编译时编译器会将其构造方法去除,将其功能和参数都放在了 方法中,也就是说在枚举类的字节码中 方法充当了构造方法的作用。
领取专属 10元无门槛券
手把手带您无忧上云