您的位置 首页 java

Java基础知识,简单聊聊Java枚举类型

enum 实现

JDK5中提供了Java 枚举类型 的实现,与其说是一种新类型,倒不如说是一种语法糖。

public enum Season {

SPRING,

SUMMER,

AUTUMN,

WINTER

}

通过 反编译 工具 jad 来看看这段代码是如何实现的,反编译后的代码如下:

public final class Season extends Enum {

public static Season[] values() {

return (Season[])$VALUES.clone();

}

public static Season valueOf(String s) {

return (Season)Enum.valueOf(Season, s);

}

private Season(String s, int i) {

super(s, i);

}

public static final Season SPRING;

public static final Season SUMMER;

public static final Season AUTUMN;

public static final Season WINTER;

private static final Season $VALUES[];

static {

SPRING = new Season(“SPRING”, 0);

SUMMER = new Season(“SUMMER”, 1);

AUTUMN = new Season(“AUTUMN”, 2);

WINTER = new Season(“WINTER”, 3);

$VALUES = (new Season[] {

SPRING, SUMMER, AUTUMN, WINTER

});

}

}

通过反编译的代码可以发现:

1、Season是一个普通的类,继承自Enum,并通过final关键字修饰,避免被继承,

2、枚举中的SPRING、SUMMER、AUTUMN和WINTER是Season类的静态实例,并在类 构造器 <clinit>方法中进行初始化。

3、values()方法返回私有变量$VALUES[]的副本,$VALUES[]也是在<clinit>方法中进行初始化。

如何使用enum

1、 单例模式

在JVM类加载的那些事中,我们已经知道类构造器<clinit>只能被一个线程在类加载的初始化阶段进行执行,所以枚举的每个实例在Java堆中有且只有一个副本,这种特性让枚举很容易就实现了单例模式,这也正是Effective Java作者 Josh Bloch 提倡使用实现单利模式的方式。

public enum Singleton { INSTANCE;}

2、在switch中使用

3、自定义字段和方法

enum中除了默认字段和方法之外,可以针对业务逻辑进行自定义。

public enum EnumTest {

PLUS (“+”) {

@ Override

public int bind(int arg1, int arg2) {

return arg1 + arg2;

}

},

SUB(“-“) {

@Override

public int bind(int arg1, int arg2) {

return arg1 – arg2;

}

};

final String operation;

EnumTest(String operation) {

this.operation = operation;

}

abstract int bind(int arg1, int arg2);

}

4、实现接口

interface Operation{

int operate(int arg1, int arg2);

}

public enum EnumTest implements Operation {

PLUS(“+”) {

@Override

public int operate(int arg1, int arg2) {

return arg1 + arg2;

}

},

SUB(“-“) {

@Override

public int operate(int arg1, int arg2) {

return arg1 – arg2;

}

};

final String operation;

EnumTest(String operation) {

this.operation = operation;

}

}

在实际应用中,可以把 “+”、”-” 作为key,PLUS和SUB作为value,预先保存在 hashMap 中,具体使用方式如下:

Operation operation = hashMap.get(“+”);

int result = operation.operate(1, 2);

文章来源:智云一二三科技

文章标题:Java基础知识,简单聊聊Java枚举类型

文章地址:https://www.zhihuclub.com/194396.shtml

关于作者: 智云科技

热门文章

网站地图