zoukankan      html  css  js  c++  java
  • JDK5-枚举

    1. 使用普通类模拟枚举

     1 public class Weekday {
     2     private Weekday() {} // 私有化
     3     
     4     public static final Weekday MONDAY = new Weekday();  // 每个枚举都是一个对象
     5     public static final Weekday TUESDAY = new Weekday();
     6 
     7     public String toString() {
     8         if(this == MONDAY)
     9             return "Monday";
    10         else if(...) ...
    11     }
    12 }

    2. 使用抽象类模拟枚举

     1 public abstract class Weekday {
     2     private Weekday() {}
     3 
     4     public final static Weekday MONDAY = new Weekday() {
     5         public Weekday nextDay() {
     6             return TUESDAY;
     7         }
     8     };
     9 
    10     public final static Weekday TUESDAY = new Weekday() {
    11         public Weekday nextDay() {
    12             return WEDNESDAY;
    13         }
    14     };
    15 
    16     ...
    17 
    18     public abstract Weekday nextDay();
    19 }

    使用抽象类模拟可以免除写大量的if-else语句,不需要对每个对象进行判断,只需要有具体实现类完成即可

    3. 枚举类

    1 public enum Weekday {
    2     SUN, MON, TUE, WED, THU, FRI, SAT
    3 }

    普通的枚举类末尾不需要写分号

    4. 带构造参数枚举

    1 public enum Weekday {    
    2     SUN(5), MON(), TUE(7), WED(), THU(9), FRI, SAT;    // 必须第一行,且以分号结尾
    3 
    4     private Weekday() {}
    5     private Weekday(int number) {
    6         System.out.println(number);
    7     }
    8 }

    枚举中每个变量都是static final的

    5. 带抽象函数的枚举

     1 public enum Weekday {    // enum不用abstract修饰
     2     SUN(5) {
     3         public Weekday nextDay() {
     4             return MON;
     5         }
     6     }, 
     7     MON() {
     8         public Weekday nextDay() {
     9             return TUE;
    10         }
    11     }, 
    12     TUE() {
    13         public Weekday nextDay() {
    14             return WED;
    15         }
    16     }, 
    17     WED() {
    18         public Weekday nextDay() {
    19             return THU;
    20         }
    21     }, 
    22     THU() {
    23         public Weekday nextDay() {
    24             return FRI;
    25         }
    26     }, 
    27     FRI() {
    28         public Weekday nextDay() {
    29             return SAT;
    30         }
    31     }, 
    32     SAT() {
    33         public Weekday nextDay() {
    34             return SUN;
    35         }
    36     };
    37 
    38     private Weekday() {}
    39     private Weekday(int number) {
    40         System.out.println(number);
    41     }
    42 
    43     public abstract Weekday nextDay();
    44 }

    6. 枚举类中的方法

      toString()  - String

      name()  - String

      ordinal()  - int

      valueOf(String name)  - Weekday

      values()  - Weekday[]

  • 相关阅读:
    P1486 [NOI2004]郁闷的出纳员
    poj2155 Matrix
    [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
    分布式相关学习整理
    分布式学习之JTA
    linux相关命令整理
    每日笔记-redis的理解及相关应用
    利用redis实现分布式锁知识点总结及相关改进
    每日笔记-类加载机制及相关拓展
    多线程学习系列-概述
  • 原文地址:https://www.cnblogs.com/joshua-aw/p/6020389.html
Copyright © 2011-2022 走看看