Java枚举
Java枚举有如下特点:
- 枚举类省略了private类型的构造函数,且构造函数只能为私有;
- 枚举的域(field)实质就是相应的枚举类的一个实例对象;
- 当访问枚举的实例(域)时才会执行构造方法实例化,例如下面的DAY实例只有被访问时才会被创建;
- 枚举的实例(域)都被static final修饰,保证了只能被实例化一次;
- 编译器会自动为枚举继承java.lang.Enum的类,所以代码中枚举只能实现接口而不能再继承其他类;
枚举原理
下面看一个简单的枚举类:
package com.faith.net; /** * 日期类型 */ public enum DateType { DAY; }
上面的代码在编译后实际等同于:
public class DateType extends Enum { public static final DateType DAY; private DateType () {} }
可以把DateType看做一个类,而Day是DateType的一个实例。它的构造方法则是私有的。
枚举添加静态变量/方法和成员变量/方法
枚举中也可以添加静态变量、静态方法和成员变量、成员方法:
public enum DateType { DAY; static int value; public static int getValue() { return value; } String name; public String getName() { return name; } }
我们把DateType看做一个类,静态变量和静态方法和普通类调用方式一样:
DateType.value DateType.getValue()
成员变量和成员方法是每个类的实例才能调用的方法。而枚举类的实例就是它的域。所以调用枚举的成员变量和方法,通过如下方式:
DateType.DAY.name DateType.DAY.getName()
重写枚举成员方法
枚举的每个实例(域)还可以重写枚举中的成员方法,类似于多态,如下:
public enum DateType { DAY { public Integer getValue() { return 0; } }; static Integer value = 1; public static Integer getValue() { return value; } String name; public String getName() { return name; } }
DAY中重写了getValue方法,重写前DateType.DAY.getValue()值为1,重写后则调用DAY中自己定制的getValue方法,结果为0。
枚举添加抽象方法
还可以在枚举中添加抽象方法,强制所有实例(域)都实现各自的处理逻辑:
public enum DateType { DAY { @Override public String getText() { return null; } }, WEEK { @Override public String getText() { return null; } }; public abstract String getText(); // 抽象方法,强制所有实例实现 }
枚举实现接口
强制实例必须实现方法还可以通过实现接口:
public interface NameEnum { String getName(); }
public enum DateType implements NameEnum { DAY { @Override public String getName() { return null; } }, Week { @Override public String getName() { return null; } }; }
带参构造
枚举使用带参构造函数:
package com.faith.net; import java.util.HashMap; import java.util.Map; /** * 日期类型 * * @author hugende */ public enum DateType { DAY("sdfsdf", 0) { @Override public String getText() { return null; } }, WEEK("sdf", 1) { @Override public String getText() { return null; } }; public abstract String getText(); String name; Integer age; DateType(String name, Integer age) { this.name = "s"; this.age = age; } }
访问方式如下:
DateType.DAY.name // 0 DateType.WEEK.name // 1
遍历枚举
枚举提供了values方法:
public class EnumTest { public static void main(String[] args) { DateType[] values = DateType.values(); for (DateType dateType : values) { System.out.println(dateType.age); } } }
枚举的父类
Java强制枚举实现了Enum类,这个类的声明如下:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable
可见其实现了Comparable、Serializable,支持了比较与序列化传输。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
[译]RabbitMQ教程C#版 - 远程过程调用(RPC)
先决条件 本教程假定 RabbitMQ 已经安装,并运行在localhost 标准端口(5672)。如果你使用不同的主机、端口或证书,则需要调整连接设置。 从哪里获得帮助 如果您在阅读本教程时遇到困难,可以通过邮件列表 联系我们。 在第 [教程[2]](https://www.cnblogs.com/esofar/p/rabbitmq-work-queues.html) 中,我们学习了如何使用工作队列在多个工作单元之间分配耗时任务。 但是如果我们想要运行一个在远程计算机上的函数并等待其结果呢?这将是另外一回事了。这种模式通常被称为 远程过程调用 或 RPC 。 在本篇教程中,我们将使用 RabbitMQ 构建一个 RPC 系统:一个客户端和一个可扩展的 RPC 服务器。由于我们没有什么耗时任务值得分发,那干脆就创建一个返回斐波那契数列的虚拟 RPC 服务吧。 客户端接口 为了说明如何使用 RPC 服务,我们将创建一个简单的客户端类。该类将暴露一个名为Call的方法,用来发送 RPC 请求并且保持阻塞状态,直到接收到应答为止。 var rpcClient = new RPCClient(...
- 下一篇
JavaScript学习(十四)---String对象中的模式匹配方法
目录 1.match()方法 语法:stringobj.match(rgExp) 例子: 2.search()方法 语法:stringobj.search(rgExp) 例子: 3.replace()方法 语法:replace(rgExp.replaceText) 例子: 4.split()方法 语法:split([separator[,limit]]) 1.match()方法 match()方法使用正则表达式模式对字符串进行查找,并将包含查找的结果作为数组返回。 语法:stringobj.match(rgExp) stringobj:必选项。对其进行查找的String对象或字符串文字 rgExp:必选项。为正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。 如果match方法没有找到匹配,则返回null。如果找到匹配则返回一个数组并且更新全局RegExp对象的属性以反映结果。 match方法返回的数组有3个属性:input,index,lastindex。 如果没有全局标志(g),数组的0元素包含整个匹配,而第1-n元素包含了匹配中曾...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 2048小游戏-低调大师作品