按照一些资料上讲,其实enum也就是在编译器层面实现用类来包装枚举(typesafe enum 模式)的思想。以保证类型安全。
自己用类来写枚举其实效果也还是不错的,只是代码略显啰嗦。
例子代码
 public class EnumClass1 extends EnumClass {
private EnumClass1(String id,String key){
super(id,key);
} public static final EnumClass1 ENUM_1_1=new EnumClass1 ("1","1");
public static final EnumClass1 ENUM_1_2=new EnumClass1 ("2","2");
public static final EnumClass1 ENUM_1_3=new EnumClass1 ("3","3");
//
public static final EnumClass1 ENUM_1_4=new EnumClass1 ("4","4"); }
故想了一些办法来简化代码。

a.声明了一个静态方法超短名称用于创建枚举常量
b.常量变为一行语句赋值,可减少 public static final +类名 +new

问题:一行语句赋值是否不太符合编码惯例。 我觉得类型安全枚举,算是特例吧。它的成员都是一个类型

代码量就接近于直接用enum了

enum的其他优势: switch语句,这方面用类就无能为力了 无法完全替代enum的功能。

public class EnumClass1 extends EnumClass {
private EnumClass1(String id,String key){
super(id,key);
}
public static EnumClass1 o(String id, String key){
return new EnumClass1(id, key);
} public static final EnumClass1
ENUM_1_1=o("1","1"),
ENUM_1_2=o("2","2"),
ENUM_1_3=o("3","3"),
//
ENUM_1_4=o("4","4"); }
实际效果测试:

现有一个用此方法做的枚举类,有5个枚举常量 。
原大小为2.5K 修改后大小为2.3K貌似效果不大 ?

换另外一个枚举类型  。
共有19个枚举常量,修改前大小 3.4K,修改后大小 2.55K 。
大概少了1/4的代码。
好吧 已经算不错了。

对typesafe enum模式的改进的更多相关文章

  1. (原创)c++11改进我们的模式之改进访问者模式

    本次讲c++11改进我们的模式之改进访问者模式 访问者模式是GOF23个设计模式中比较复杂的模式之一,但是它的功能也很强大,非常适合稳定的继承层次中对象的访问,可以在不修改被访问对象的情况下,动态添加 ...

  2. 【JavaScript】设计模式-module模式及其改进

    写在前面 编写易于维护的代码,其中最重要的方面就是能够找到代码中重复出现的主题并优化他们,这也是设计模式最有价值的地方 说到这里...... <head first设计模式>里有一篇文章, ...

  3. (原创)c++11改进我们的模式之改进命令模式

    模式虽然精妙,却难完美,比如观察者模式中观察者生命周期的问题:比如访问者模式中循环依赖的问题等等:其它很多模式也存在这样那样的一些不足之处,如使用场景受限.实现复杂.不够简洁.不够通用等.但我觉得不足 ...

  4. (原创)c++11改进我们的模式之改进代理模式,实现通用的AOP框架

    c++11 boost技术交流群:296561497,欢迎大家来交流技术. 本次要讲的时候如何改进代理模式,具体来说是动态代理模式,动态代理模式一般实现AOP框架,不懂AOP的童鞋看这里.我前面的博文 ...

  5. (原创)c++11改进我们的模式之改进单例模式

    我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式.观察者模式.访问者模式.工厂模式.命令模式等模式.通过c++11的改进, ...

  6. swift的enum模式—对Alamofire入口的解析--数据结构与操作结合的模式

    swift的枚举模式是数据结构与操作结合的模式 1.enum本质是一个类型,可以定义变量: 它定义的变量可以用到其它变量用的的任何地方:函数的输入.输出.成员变量.临时变量等: 这个变量还可以带有附加 ...

  7. 设计模式之module模式及其改进

    写在前面 编写易于维护的代码,其中最重要的方面就是能够找到代码中重复出现的主题并优化他们,这也是设计模式最有价值的地方 <head first设计模式>里有一篇文章,是说使用模式的心智, ...

  8. (原创)c++11改进我们的模式之改进表驱动模式

    所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值.表驱动是将一些通过较为复杂逻辑语句来得到数据信息的方式,通过查询表的方式来实现,将数据信息存放在表里.对于消除 ...

  9. Java精通并发-Condition详解及相比于传统线程并发模式的改进

    在上一次https://www.cnblogs.com/webor2006/p/11792954.html对于Lock的具体实现类ReentrantLock用了一个示例对它进行了一个简单的了解,而它其 ...

随机推荐

  1. openCV 2.4.13 iOS background_segm.hpp 'list' file not found

    最近下载了最新版的OpenCV的Framework. 导入到项目里边,编译.然后就出现了问题 /opencv2.framework/Headers/video/background_segm.hpp: ...

  2. java web 自定义错误页面 完整jsp错误页面代码(同时写错误日志) error.jsp

    1.首先配置web.xml  添加一下代码 <error-page> <error-code>500</error-code> <location>/e ...

  3. 【面试虐菜】—— Oracle知识整理《收获,不止Oracle》

    普通堆表不足之处:     表更新有日志开销     表删除有瑕疵     表记录太大检索较慢     索引回表读开销很大     有序插入难有序读出   DELETE产生的undo最多,redo也最 ...

  4. 换种眼光看Spring之bean是怎么诞生的(一)

    Java的世界里处处存在了对象,有时候换一种眼光往往会给自己带来与之前大不一样的理解. 一个对象的出现离不开字节码,拿classforname来讲,classforname("...&quo ...

  5. Linux下用来获取各种系统信息的C++类

    #include <vector> #include "sys/config.h" SYS_NAMESPACE_BEGIN /*** * 用来获取系统.内核和进程的各类 ...

  6. JSLink to render the list to show people detail info with picture

    I  create a custom list, and create a poeple column to store poeple detail info with picture in this ...

  7. android95 缩放加载大图片

    MainActivity: package com.itheima.loadimage; import android.os.Bundle; import android.app.Activity; ...

  8. debugfs恢复文件

    echo "this is test" >xx debugfs: ls -d /root/test1 () . () .. () xx <> () test.c ...

  9. ASP.net导出EXCEL乱码?试试这个

    网上的方法有说加meta的,是有用,不过,不够直接, 甭管你asp文件是utf-8还是gb2312,加入下面两句就搞掂: response.Charset="GB2312" ses ...

  10. PHP 获取当前日期的上个月的日期

    获取当前日期的上个月的日期 <?php /** *参考有: *http://www.oschina.net/code/snippet_96541_4015 *http://stackoverfl ...