代码结构调整,枚举 enum
来源:互联网 发布:服装网络营销策划案 编辑:程序博客网 时间:2024/05/21 06:31
枚举, 今天在优化代码时,觉得很多代码
public static final xxx 的方式,都可以优化一下,并且将来很多同类型的数据进行整合,就想到了枚举,
也特地百度,复习了一下, 很多都是 copy的只为了学习
for example
<1
public enum TypeEnum {
ONE, TWO, THREE
}
<2 枚举限定值
public enum TypeEnum {
ONE(1), TWO(2), THREE(3)int value; TypeEnum(int value) { this.value = value; } public int getValue() { return value; }
}
TypeEnum.ONE.getValue()
<3
enum还内置了许多方法,常用的如下:int compareTo(E o) 比较此枚举与指定对象的顺序。Class<E> getDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象。String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。String toString() 返回枚举常量的名称,它包含在声明中。static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。static T[] values()返回该枚举的所有值。
< 4.
public enum TypeEnum { ONE(1, "一"), TWO(2, "二"), THREE(3, "三"); int value; String name; TypeEnum(int value, String name) { this.value = value; this.name = name; } public int getValue() { return value; } public String getName() { return name; } //举例,通过name 获取 value public TypeEnum getByValue(int value) { for(TypeEnum typeEnum : TypeEnum.values()) { if(typeEnum.value == value) { return typeEnum; } } throw new IllegalArgumentException("No element matches " + value); } }
<5 枚举判断,
.equls 和 == 是一样的 枚举的 equls 内部封装的是 ==
<6 使用接口
public enum TypeEnum implements InfXXX{ ONE, TWO, THREE }
< 7. EnumSet,EnumMap 的应用
public class Test { public static void main(String[] args) { // EnumSet的使用 EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class); for (EnumTest day : weekSet) { System.out.println(day); } // EnumMap的使用 EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class); weekMap.put(EnumTest.MON, "星期一"); weekMap.put(EnumTest.TUE, "星期二"); // ... ... for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) { Entry<EnumTest, String> entry = iter.next(); System.out.println(entry.getKey().name() + ":" + entry.getValue()); } }}
<8 .原理分析
enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。EnumTest 经过反编译(javap com.hmw.test.EnumTest 命令)之后得到的内容如下:public class com.hmw.test.EnumTest extends java.lang.Enum{ public static final com.hmw.test.EnumTest MON; public static final com.hmw.test.EnumTest TUE; public static final com.hmw.test.EnumTest WED; public static final com.hmw.test.EnumTest THU; public static final com.hmw.test.EnumTest FRI; public static final com.hmw.test.EnumTest SAT; public static final com.hmw.test.EnumTest SUN; static {}; public int getValue(); public boolean isRest(); public static com.hmw.test.EnumTest[] values(); public static com.hmw.test.EnumTest valueOf(java.lang.String); com.hmw.test.EnumTest(java.lang.String, int, int, com.hmw.test.EnumTest);}所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
总结
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。
阅读全文
0 0
- 代码结构调整,枚举 enum
- 枚举enum用法-代码
- java枚举enum用法--代码示例
- c++之enum(枚举) 仅仅代码
- 枚举 ENum
- enum枚举
- Enum:枚举
- enum 枚举
- 枚举(enum)
- Enum 枚举
- enum(枚举)
- 枚举 Enum
- Enum枚举
- 枚举 Enum
- 枚举Enum
- enum枚举
- enum 枚举
- 枚举enum
- mysql mysql-5.7.16-winx64解压版安装超详细图文教程 安装
- HTTP状态码
- Android NDK调用json cpp so的方法
- 剑指offer 编程题(16):判断是否子树
- 2017年12月18日的工作总结
- 代码结构调整,枚举 enum
- 【scala 代码片段1】轻松入门scala--列表的操作以及文件读取
- Java实现多线程的两种方式
- Java内存不足之PermGen space错误探究
- 手把手教你搭建AI开发环境 !(附代码、下载地址)
- Fastjson
- 【云计算的1024种玩法】使用阿里云解析 + RAM 快速签署 Let's Encrypt 证书
- Echart总结 添加滚动条属性
- 封装汉语自然语言处理中的常用方法(附代码:生成中文词云)