zoukankan      html  css  js  c++  java
  • java-enum

    原始的接口定义常量

    public interface IConstants {

        String MON = "Mon";

        String TUE = "Tue";

        String WED = "Wed";

        String THU = "Thu";

        String FRI = "Fri";

        String SAT = "Sat";

        String SUN = "Sun";

    }

    语法(定义)

        创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class EnumE extends EnumE》》,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

    package com.hmw.test;

     

    public enum EnumTest {

        MON, TUE, WED, THU, FRI, SAT, SUN;

    }

    这段代码实际上调用了7 Enum(String name, int ordinal)

    new EnumEnumTest("MON",0);

    new EnumEnumTest("TUE",1);

    new EnumEnumTest("WED",2);

        ... ...

    遍历、switch 等常用操作

    enum进行遍历和switch的操作示例代码:

    public class Test {

        public static void main(String[] args) {

            for (EnumTest e : EnumTest.values()) {

                System.out.println(e.toString());

            }

             

            System.out.println("----------------我是分隔线------------------");

             

            EnumTest test = EnumTest.TUE;

            switch (test) {

            case MON:

                System.out.println("今天是星期一");

                break;

            case TUE:

                System.out.println("今天是星期二");

                break;

            // ... ...

            default:

                System.out.println(test);

                break;

            }

        }

    }

    输出结果:

    MON

    TUE

    WED

    THU

    FRI

    SAT

    SUN

    ----------------我是分隔线------------------

    今天是星期二

    enum 对象的常用方法介绍

    int compareTo(E o) 
              比较此枚举与指定对象的顺序。

    ClassE getDeclaringClass() 
              返回与此枚举常量的枚举类型相对应的 Class 对象。

    String name() 
              返回此枚举常量的名称,在其枚举声明中对其进行声明。

    int ordinal() 
              返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

    String toString()

               返回枚举常量的名称,它包含在声明中。

    static T extends EnumT》》valueOf(ClassTenumType, String name) 
              返回带指定名称的指定枚举类型的枚举常量。

    public class Test {

        public static void main(String[] args) {

            EnumTest test = EnumTest.TUE;

             

            //compareTo(E o)

            switch (test.compareTo(EnumTest.MON)) {

            case -1:

                System.out.println("TUE MON 之前");

                break;

            case 1:

                System.out.println("TUE MON 之后");

                break;

            default:

                System.out.println("TUE MON 在同一位置");

                break;

            }

             

            //getDeclaringClass()

            System.out.println("getDeclaringClass(): " + test.getDeclaringClass().getName());

             

            //name()   toString()

            System.out.println("name(): " + test.name());

            System.out.println("toString(): " + test.toString());

             

            //ordinal(), 返回值是从 0 开始

            System.out.println("ordinal(): " + test.ordinal());

        }

    }

    输出结果:

    TUE MON 之后

    getDeclaringClass(): com.hmw.test.EnumTest

    name(): TUE

    toString(): TUE

    ordinal(): 1

    enum 自定义属性和方法

    enum 对象加一下 value 的属性和 getValue() 的方法:

    package com.hmw.test;

     

     

    public enum EnumTest {

        MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {

            @Override

            public boolean isRest() {

                return true;

            }

        },

        SUN(0) {

            @Override

            public boolean isRest() {

                return true;

            }

        };

     

        private int value;

     

        private EnumTest(int value) {

            this.value = value;

        }

     

        public int getValue() {

            return value;

        }

     

        public boolean isRest() {

            return false;

        }

    }

    public class Test {

        public static void main(String[] args) {

            System.out.println("EnumTest.FRI value = " + EnumTest.FRI.getValue());

        }

    }

    输出结果:

    EnumTest.FRI value = 5

    EnumSetEnumMap 的应用

    public class Test {

        public static void main(String[] args) {

            // EnumSet的使用

            EnumSetEnumTestweekSet = EnumSet.allOf(EnumTest.class);

            for (EnumTest day : weekSet) {

                System.out.println(day);

            }

     

            // EnumMap的使用

            EnumMapEnumTest, StringweekMap = new EnumMap(EnumTest.class);

            weekMap.put(EnumTest.MON, "星期一");

            weekMap.put(EnumTest.TUE, "星期二");

            // ... ...

            for (IteratorEntryEnumTest, String》》 iter = weekMap.entrySet().iterator(); iter.hasNext();) {

                EntryEnumTest, Stringentry = iter.next();

                System.out.println(entry.getKey().name() + ":" + entry.getValue());

            }

        }

    }

    总结

        可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enumjava是单一继承)

     

  • 相关阅读:
    iOS中GestureRecognizer的6大手势与代理方法详细使用
    使用pan手势实现抽屉效果
    mfc HackerTools释放资源
    mfc HackerTools防止程序双开
    FLV简介
    AAC简介
    H.264简介
    PCM简介
    YUV格式
    编译ffmpeg(第一次),实现JPG转MP4
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254110.html
Copyright © 2011-2022 走看看