• 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是单一继承)

     

  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254110.html
Copyright © 2020-2023  润新知