Enum介绍

Posted wansw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Enum介绍相关的知识,希望对你有一定的参考价值。

public enum Color {
    RED, YELLOW, BLUE;
}

说明

使用的是enum关键字而不是class

多个枚举变量之间用 逗号 隔开

枚举变量名大写,多个单词之间用 _ 隔开。 如。 ALL_NUM...

定义完枚举变量后, 用分号 结束。如果只有枚举变量,而没有自定义变量,分号可以省略。

使用 只需要【类名.变量名】就可以了,和使用静态变量一样。

方法

values()

这个方法会返回包括所有枚举变量的数组

for (Color color : Color.values()) {
    // 下标
    System.out.println(color.ordinal());
    // 枚举变量名字
    System.out.println(color.name());
    // 同上
    System.out.println(color.toString());
}
// 比较的是下标
System.out.println(Color.valueOf("YELLOW").compareTo(Color.valueOf("BLUE")));

valueOf(String name)

它的作用是传来一个字符串,然后将它转变为对应的枚举变量 .

字符串和定义枚举变量的字符串必须一样,并且区分大小写。如果不存在会抛出异常。java.lang.IllegalArgumentException

public enum Weekday {
    MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0);

    private int index;

    private Weekday(int index){
        this.index = index;
    }
}

说明

定义的枚举变量 必须 在第一行。以 分号结束。

构造函数只能是 private 的。否则 编译不通过

自定义的 index 和 下标 不冲突。

枚举类中的抽象类

实例:

public enum Color {
    RED() {
        @Override
        public Color getNextColor() {
            return YELLOW;
        }
    },
    YELLOW(){
        @Override
        public Color getNextColor() {
            return BLUE;
        }
    },
    BLUE(){
        @Override
        public Color getNextColor() {
            return RED;
        }
    };

        /**
     * 获取下一种颜色
     * @return
     */
    public abstract Color getNextColor();
}
Color yellow = Color.valueOf("YELLOW");
System.out.println(yellow.getNextColor());

// BLUE

枚举类的原理:

public enum Weekday {
    MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0);

    private int index;

    private Weekday(int index){
        this.index = index;
    }
}

javap 反编译 Weekday.class

public final class enums.Weekday extends java.lang.Enum<enums.Weekday> {
  public static final enums.Weekday MON;
  public static final enums.Weekday TUS;
  public static final enums.Weekday WED;
  public static final enums.Weekday THU;
  public static final enums.Weekday FRI;
  public static final enums.Weekday SAT;
  public static final enums.Weekday SUN;
  public static enums.Weekday[] values();
  public static enums.Weekday valueOf(java.lang.String);
  static {};
}

是 final 类,不能被继承。

继承了 java.lang.Enum 类。只能实现接口了。

在Color枚举类中定义的 RED、、、本身是一个 Color对象的引用。Color RED = new Color(); 使用匿名内部类方式:

Color RED = new Color() {
    @override
  public Color getNextColor() {
    return YELLOW;
  }
}
在枚举类中  只用写  RED(){...} JVM会完成其它操作

枚举类在switch中应用

switch (color) {
case RED:
    color = Color.GREEN;
    break;
case YELLOW:
    color = Color.RED;
    break;
case GREEN:
    color = Color.YELLOW;
    break;
}

枚举类实现接口

public interface Behaviour {
    void print();
    String getInfo();
}
public enum Weekday implements Behaviour{
    MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0);

    private int index;

    Weekday(int index){
        this.index = index;
    }

    @Override
    public void print() {
        System.out.println(this.index + ":" + toString());
    }

    @Override
    public String getInfo() {
        return toString();
    }
}

枚举实现 单例模式

public enum DataSourceEnum {
    DATASOURCE;
    private DBConnection connection = null;
    private DataSourceEnum() {
        connection = new DBConnection();
    }
    public DBConnection getConnection() {
        return connection;
    }
} 

以上是关于Enum介绍的主要内容,如果未能解决你的问题,请参考以下文章

[python] Python枚举模块enum总结

Enum类的介绍和使用

mysql怎么获取数据表字段enum类型的默认值

Enum介绍

[JAVA]枚举类型的应用

枚举Enum 的常用方法