使用enum关键字来实现单例模式的好处是可以提供序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。—— 来自《Effective Java》
【1】配置文件test.properties
#info a_text=I am text A b_text=I am text B
【2】枚举实例AppContext.java
package hhf.propertie; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * 读取配置文件 * @author HHF * 2014年12月29日 */ public enum AppContext { INSTANCE; private volatile Properties configuration = new Properties(); public void init() { InputStream is = this.getClass().getResourceAsStream("/test.properties"); if (is != null) { try { this.configuration.clear(); this.configuration.load(is); } catch (IOException e) { } finally { try { is.close(); } catch (Throwable t) {} } } } public String getConfigValue(String key) { return this.configuration.getProperty(key); } }
【3】读取配置文件临时保存数据到常量内SystemConstants.java
package hhf.propertie; /** * 缓存配置文件信息 * @author HHF * 2014年12月29日 */ public class SystemConstants { //info public static final String DATA_A = AppContext.INSTANCE.getConfigValue("a_text"); public static final String DATA_B = AppContext.INSTANCE.getConfigValue("b_text"); }
【4】测试文件Main.java
public class Main { public static void main(String[] args) { AppContext.INSTANCE.init(); System.out.println(SystemConstants.DATA_A); System.out.println(SystemConstants.DATA_B); } }
一个enum常量(这里是INSTANCE)代表了一个enum的实例,enum类型只能有这些常量实例。标准保证enum常量(INSTANCE)不能被克隆,也不会因为反序列化产生不同的实例,想通过反射机制得到一个enum类型的实例也是不行的。
(PS;附上测试工程源码)
相关推荐
php-enum, PHP Enum实现灵感来自 SplEnum PHP enum 实现来自 SplEnum 为什么?首先,SplEnum 并不集成到PHP中,你必须单独安装它。使用 enum 而不是类常量提供了以下优点:你可以键入提示: function setAction(Ac
枚举模式public enum Singleton3 {Holder模式public class Singleton4 {* 类级内部类,也就是静态的成员内部类
本源码由 springboot 开发,只有2个简单的文件(1是 枚举类单例,2是 controller请求测试类)。 主要测试了枚举类的饿汉式加载机制 / 单例机制。 代码中包含枚举类的基本使用,和完整的请求示例。 主要实现了枚举类...
常见的enum类型重定义的解决方法,清晰明了。
enum枚举的方法
c#遍历枚举(ENUM)类型的方法,简单实用,适合c#初学者
使用 enum 关键字实现枚举注意事项 15 enum 用方法说明 15 enum 实现接口 15 注解的理解 16 基本的 Annotation 介绍 16 @Override 注解 16 @Override 使用说明 17 @Deprecated 注解 17 @SuppressWarnings 注解 17 元...
主要介绍了java 中enum的使用方法详解的相关资料,希望通过本文能帮助到大家,理解掌握java 中enum的使用方法,需要的朋友可以参考下
枚举:golang的Enum实现
目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将EnumSet转换为Enum数组使用...
Enum.doc Enum.docEnum.doc Enum.doc Enum.doc Enum.doc Enum.doc Enum.doc Enum.doc
Enum的用法Enum的用法Enum的用法Enum的用法
以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码 代码如下: # way1 class Directions: up = 0 down = 1 left = 2 right =3 print Directions.down # way2 dirUp, dirDown, dirLeft, dirRight =...
简单介绍了DNS和ENUM的原理及在IMS网络中的使用
Laravel开发-enum PHP的枚举实现
3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 二、如何定义枚举类 方式一:Jdk5.0之前,自定义枚举类 方式二:jdk5.0之后,可以使用enum关键字定义枚举类 三、Enum类的主要方法: 四、使用enum...
ava enum 枚举的spring boot2.x完美实现demo源码。java的枚举类型,可以理解为一种特殊的java类
本文实例讲述了Python简单实现enum功能的方法。分享给大家供大家参考,具体如下: class Enumerate(object): def __init__(self,names): for number,name in enumerate(names.split()): setattr(self, name, ...
包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。