代码结构调整,枚举 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是单一继承)。

原创粉丝点击