首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2018-06-13 如何优雅高效创建单例——枚举Enum

使用非枚举方式实现单例,都要自己来保证线程安全,所以,这就导致其他方法必然是比较臃肿。那么,为什么使用枚举就不需要解决线程安全问题呢?...这部分内容可以参考我另外一篇博文《深度分析Java枚举类型—-枚举线程安全性及序列化问题》,这里我简单说明一下: 定义枚举时使用enum和class一样,是Java中一个关键字。...通过将定义好枚举反编译,我们就能发现,其实枚举在经过javac编译之后,会被转换成形如public final class T extends Enum定义。...所以,创建一个enum类型是线程安全。 也就是说,我们定义一个枚举,在第一次被真正用到时候,会被虚拟机加载并初始化,而这个初始化过程是线程安全。...其中专门对枚举序列化做了如下规定: 大概意思就是:在序列化时候Java仅仅是将枚举对象name属性输出到结果中,反序列化时候则是通过java.lang.EnumvalueOf方法来根据名字查找枚举对象

99750

Java中枚举Enum

在Java没有提供枚举时候,比如我们要使用一个表示周几枚举值怎么办? Java中是这样解决:定义一个私有的构造函数,然后在类中new出对象来。...public enum Date { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday; } 如果我要定义这样一个枚举类,让它能够返回对应日期中文怎么办...我们可以定义枚举成员函数。...: 1.枚举也是一种特殊形式Java类 2.枚举类中声明每一个枚举值代表枚举一个实例对象 3.与Java中普通类一样,在声明枚举类时,也可以声明属性、方法构造函数,但枚举构造函数必须为私有的...4.枚举类也可以实现接口,或继承抽象类 5.若枚举只有一个枚举值,则可以当做单态设计模式使用 最后需要明确是: Java中声明枚举类,均是java.lang.Enum子类,它继承了Enum

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

java枚举类型enum使用

Java 中枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。...首先给Light 枚举类型增加构造方法,然后每个枚举类型值通过构造函数传入对应参数,同时覆写toString 方法,在该方法中返回从构造函数中传入参数,改造后代码如下: public enum...可以创建一个enum 类,把它看做一个普通类。除了它不能继承其他类了。(java 是单继承,它已经继承了Enum), 可以添加其他方法,覆盖它本身方法 3....无法从enum 继承子类,如果需要扩展enum元素,在一个接口内部,创建实现该接口枚举,以此将元素进行分组。达到将枚举元素进行分组。 6. 使用EnumSet 代替标志。...enum 要求其成员都是唯一,但是enum 中不能删除添加元素。 7. EnumMap key 是enum ,value 是任何其他Object 对象。 8.

1.1K100

JAVA枚举类型(Enum使用

如果你创建了一个season类,你当然有义务维护这个类实例对象只能是春(SPRING)、夏(SUMMER)、秋(AUTUMN)、冬(WINTER)这四个。.../** * 枚举后缀建议为Enum枚举类型实例对象建议全大写(这样做符合JAVA规范) */ public enum SeasonEnum{ SPRING,SUMMER,AUTUMN...我们这样设想一下,当我们创建SeasonEnum这个枚举类时,可不可以让SeasonEnum中每一个实例对象都有一个getChinese()方法呢。答案是肯定,而且这种做法在企业开发中很常见。...public enum SeasonEnum { //枚举实例对象必须在最前面先定义,而且必须每个实例对象都必须维护上chinese成员变量 SPRING("春天"),SUMMER(...如果想看它更多用法请参考下面的链接 更多用法请参考这篇Java 枚举(enum) 详解7种常见用法_请叫我大师兄_博客-CSDN博客_java 枚举定义与用法 版权声明:本文内容由互联网用户自发贡献

1.2K20

Java 枚举类型enum 使用

Java 枚举类型enum 使用 最近跟同事讨论问题时候,突然同事提到我们为什么java 中定义常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?...Java 中枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。...可以创建一个enum 类,把它看做一个普通类。除了它不能继承其他类了。(java 是单继承,它已经继承了Enum), 可以添加其他方法,覆盖它本身方法 3.    ...无法从enum 继承子类,如果需要扩展enum 中元素,在一个接口内部,创建实现该接口枚举,以此将元素进行分组。达到将枚举元素进行分组。 6.    使用EnumSet 代替标志。...enum 要求其成员都是唯一,但是enum 中不能删除添加元素。 7.    EnumMap key 是enum ,value 是任何其他Object 对象。 8.

1.2K91

如何处理PHP代码中枚举类型enum

现在我们将看到由 Java Enum 启发并实现 multiton 两个不同库. 第一个是 eloquent/enumeration. 它为每个元素创建一个定义类实例....通过遵循在enum本身中保持这些具体实现规则,我们可以很容易地发现滥用。  匿名类 在这里很有用。 库强制抽象枚举类,但不能强制创建有效元素。 这是这个库用户责任。 图书馆照顾其余。...数组是用枚举元素名称来索引。当手动创建元素,我们定义我们元素名称作为数据键。 我们可以用 WorldSide::iterator() 获取枚举元素顺序迭代器,来定义和遍历他们。...如果我们有一些常量价值对我们无关紧要,但是与同一群体中其他所有人有所不同则是重要,请使用枚举 枚举为代码提供了更多上下文,也可以将某些检查委托给引擎本身。...如果PHP有一个本地枚举支持,这将是非常好。语法更改可以使代码更具可读性。引擎可以为我们执行检查,并执行一些不能从用户区执行规则。 你如何使用枚举,你对这个主题有什么想法?请在下方评论。

1.5K30

c++枚举类型enum输出_python中枚举

目录: 一.Enum枚举含义: 二.Enum枚举声明(举例说明): 三.Enum枚举特点(举例介绍): 四.Enum枚举作用: 五.Enum枚举注意事项(举例说明): 一.Enum枚举含义:...Enum枚举:枚举是一组命名整型常量,枚举类型是使用 enum 关键字声明。...二.Enum枚举声明(举例说明): 枚举声明方式如下: enum //枚举名称 { enumeration list//写内容也就是枚举包含内容,用逗号隔开 }...1. enum_name 指定枚举类型名称。...运行结果: 四.Enum枚举作用: 枚举可以使代码更易于维护,有助于确保给变量指定合法、期望值; 枚举使代码更清晰,允许用描述性名称表示整数值,而不是用含义模糊数来表示; 枚举使代码更易于键入

1.5K40

Java——枚举:优雅而干净enum

《Java编程思想》中有这么一句话:“有时恰恰因为它,你才能够‘优雅而干净’地解决问题”——这句话说是谁呢?就是本篇主角——枚举Enum)——大家鼓掌了。...3-28-03.jpeg 一、枚举常规用法 一个精简枚举非常干净优雅,见下例。...public enum Chenmo { WANGER, WANGSAN, WANGSI } 我们为沉默枚举创建了三个值,分别是王二、王三、王四。...这段代码实际上调用了3次Enum(String name, int ordinal)(ordinal单词意思为顺序),也就是: new Enum("WANGER", 0); new Enum...三、枚举实现单例 《Effective Java》一书中对使用枚举实现单例方式推崇备至: 使用枚举实现单例方法虽然还没有广泛采用,但是单元素枚举类型已经成为实现Singleton最佳方法。

3K00

C#Enum——枚举「建议收藏」

创建 Days 对象时,如果不显式为其赋值,则它将具有默认值 Days.Sunday (0)。创建枚举时,应选择最合理默认值并赋给它一个零值。...这便使得只要在创建枚举时未为其显式赋值,则所创建全部枚举都将具有该默认值。枚举中大小写敏感,但是建议不要这样。   ...注意:System.Enum 类型是所有枚举类型抽象基类(它是一种与枚举类型基础类型不同独特类型),并且从 System.Enum 继承成员在任何枚举类型中都可用。...存在从任何枚举类型到System.Enum 装箱转换,并且存在从 System.Enum 到任何枚举类型取消装箱转换。System.Enum 本身不是枚举类型。...所以,在使用枚举时候,感觉到并不是很方便,有的时候我们还是比较乐意创建常量,然后在类中,声明一个集合来容纳常量和其意义。

1.3K20

【C自定义类型详解】——结构体(struct)、位段、枚举(enum)、联合(union)

主要目录 1、结构体(struct) 1.0 结构体类型声明 1.1 结构自引用 1.2 结构体变量定义和初始化 1.3 结构体内存对齐 1.4 结构体传参 1.5 结构体实现位段 2、枚举(enum...) 3、 联合(union) 1、结构体(struct) 1.0 结构体类型声明 我们通常会用一个变量来定义一个事物,就比如我们要进行求和,我们通常会创建一个sum变量来存放求和结果,最终再打印sum...s2大小相同,都是6byte,所以打印出来是6 6,实际结果到底如何呢?...诸君莫急,且往下看: 要计算它大小,首先我们要了解位段内存分配是如何实现。...当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余位时,是 舍弃剩余位还是利用,这是不确定 2、枚举(enum) 枚举就是列举,即把可能取值一一列举。

94920

你是如何处理 PHP 代码中枚举类型 Enum

本文旨在提供一些更好理解什么是枚举,什么时候使用它们以及如何在php中使用它们....现在我们将看到由 Java Enum 启发并实现 multiton 两个不同库. 第一个是 eloquent/enumeration . 它为每个元素创建一个定义类实例....通过遵循在enum本身中保持这些具体实现规则,我们可以很容易地发现滥用。 匿名类 在这里很有用。 库强制抽象枚举类,但不能强制创建有效元素。这是这个库用户责任。图书馆照顾其余。...数组是用枚举元素名称来索引。当手动创建元素,我们定义我们元素名称作为数据键。 我们可以用 WorldSide::iterator() 获取枚举元素顺序迭代器,来定义和遍历他们。...如果我们有一些常量价值对我们无关紧要,但是与同一群体中其他所有人有所不同则是重要,请使用枚举 枚举为代码提供了更多上下文,也可以将某些检查委托给引擎本身。

1.5K10
领券