Java Enum

作者: 杰哥长得帅 | 来源:发表于2018-03-29 21:42 被阅读8次

Enum 类的声明:

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable

枚举也是类,一个枚举可以拥有成员变量,成员方法,构造方法。先来看枚举最基本的用法:

enum Type {
    A, B, C, D;
}

创建 enum 时,编译器会自动为我们生成一个继承自 java.lang.Enum 的类,上面的 enum 可以简单看作:

class Type extends Enum {
    public static final Type A;
    public static final Type B;
    ...
}

对于上面的例子,可以把 Type 看作一个类,而把 A,B,C,D 看作类的 Type 的实例

“类”方法和“实例”方法

在 enum 中,我们可以定义类和实例的变量以及方法:

enum Type {
    A, B, C, D;

    static int value;
    public static int getValue() {
        return value;
    }

    String type;
    public String getType() {
        return type;
    }
}

在原有的基础上,添加了类方法和实例方法。把 Type 看做一个类,那么 enum 中静态的域和方法,都可以视作类方法。和调用普通的静态方法一样,这里调用类方法也是通过 Type.getValue() 即可调用,访问类属性也是通过 Type.value 访问

下面的是实例方法,也就是每个实例才能调用的方法。那么实例是什么呢?没错,就是 A,B,C,D。所以调用实例方法,也就是通过 Type.A.getType() 来调用

最后,对于某个实例而言,还可以实现自己的实例方法:

enum Type {
    A {
        public String getType() {
            return "I will not tell you";
        }
    }, B, C, D;

    static int value;
    public static int getValue() {
        return value;
    }

    String type;
    public String getType() {
        return type;
    }
}

这里,A 实例后面的 {…} 就是属于 A 的实例方法,可以通过覆盖原本的方法,实现属于自己的定制
除此之外,还可以添加抽象方法在 enum 中,强制 ABCD 都实现各自的处理逻辑:

enum Type {
    A {
        @Override
        public String getType() {
            return "A";
        }
    }, B {
        @Override
        public String getType() {
            return "B";
        }
    }, C {
        @Override
        public String getType() {
            return "C";
        }
    }, D {
        @Override
        public String getType() {
            return "D";
        }
    };

    public abstract String getType();
}

相关文章

  • Java中enum_int_String的互相转换

    Java中enum/int/String的互相转换 enum 和 int enum -> int int -> e...

  • Java中enum_int_String的互相转换

    Java中enum/int/String的互相转换 enum 和 int enum -> int int -> e...

  • 枚举学习

    java enum枚举类 enum(枚举)类介绍 **java枚举类是一组预定义常量的集合,使用enum关键字声明...

  • 枚举类型

    java.lang.Enum static Enum valueOf(Class enumClass, St...

  • java enum

    java enum是jdk1.5引入的 ,在java.lang包中。Java Enum类型的语法结构尽管和java...

  • Java中Enum的优雅用法

    Java中Enum的优雅用法 本文简单总结一些Java中enum的坑以及优雅的用法。 普通的enum有什么问题 分...

  • Java编程思想---枚举类型

    Java编程思想---枚举类型 基本enum特性 调用enum的values()方法,可以遍历enum实例,val...

  • enums在android中的问题及替代方案

    java中enums的描述: Enum Types. An enum type is a special data...

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • enum int 互转

    Java enum与int类型的转换 public enum VideoFrameType {NV21_TYPE,...

网友评论

      本文标题:Java Enum

      本文链接:https://www.haomeiwen.com/subject/rvpvcftx.html