在java性能调优中经常要把字符串匹配转换为枚举型匹配。
介绍:
java.lang.Enum是JDK5.0版本新加入的类,我们所编写的枚举其实都是隐式的继承自它,既然它是类,因此会有类型安全性、编译期检查以及可将它用在变量声明中的能力。这可以把使用数值或字符串来模拟含义的常量彻底打败,枚举中的各个实例(值)都是被隐式声明为public static final的,而且你也不能将这些声明手动赋予给实例(值),编译器会自己处理。所以比较Enum实际是比较int型,比String快。
特点:
◆类型安全(Type Safety)
◆紧凑有效的枚举数值定义(Compact, Efficient Declaration of Enumerated Values)
◆无缝的和程序其它部分的交互操作(Seamless integration with other language features)
◆运行的高效率(Runtime efficiency)
适用场景:
程序中有字典组件,这些字典组件可以定义Enum型,运行比String快(起初用String是因为他能表达语言含义,容易阅 读程序,而Enum型坚固快和见其名知其意)。
应用实例:
简单使用:
/**
* 颜色的枚举
* @author David Day
*/
public enum ColorEnum {
/**
* 红色
*/
RED,
/**
* 绿色
*/
GREEN,
/**
* 蓝色
*/
BLUE;
public static void main(String[] args) {
// 获得枚举实例序号
int index = RED.ordinal();RED.compareTo(RED);
// 返回所有的枚举实例
ColorEnum[] colors = ColorEnum.values();
// 获得实例的名称
String colorName = GREEN.name();
// 通过实例名称来获得枚举实例
ColorEnum color = ColorEnum.valueOf(colorName);
/* 比较两个枚举的方法一
* 比较方式是比较枚举的ordinal
*/
int compare = BLUE.compareTo(BLUE);
/* 比较两个枚举的方法二
* 枚举支持直接用这种逻辑表达式方式作比较
*/
boolean isEqual = RED == GREEN;
// 枚举支持直接用switch作选择
switch (BLUE) {
case RED: break;
case GREEN: break;
case BLUE: break;
default: break;
}
}
}
复杂高级使用:
import java.awt.Color;
import java.io.Serializable;
/**
* 颜色的枚举
* 是能实现接口
* 不能继承
* @author David Day
*/
public enum ColorEnum implements Serializable {
/**
* 红色
*/
RED(255, 0, 0) {
@Override
public void doSomeThing() {
System.out.println(name());
}
},
/**
* 绿色
*/
GREEN(0, 255, 0) {
@Override
public void doSomeThing() {
System.out.println(ordinal());
}
},
/**
* 蓝色
*/
BLUE(0, 0, 255) {
@Override
public void doSomeThing() {
System.out.println(toString());
}
};
/**
* 颜色
*/
private Color color;
/**
* 实例化颜色枚举
* 枚举字段的实例化将会调用这个构造方法
* 必须用private修饰
* 代表只有本枚举自己能够构造
* 枚举的实例都是静态的
* 会在第一次访问的时候就生成
* @param r 红色
* @param g 绿色
* @param b 蓝色
*/
private ColorEnum(int r, int g, int b) {
this.color = new Color(r, g, b);;
}
/**
* @return 颜色实体
*/
public Color getColor() {
return color;
}
/**
* 定义抽象方法
* 实例必须实现它
*/
abstract void doSomeThing();
public static void main(String[] args) {
Color color = RED.getColor();
GREEN.doSomeThing();
}
}
分享到:
相关推荐
使用JDK1.6编写的枚举例子,里面有详细的注释,很有必要参考下
Java枚举的应用, 具体代码
枚举简介 适用于初学Java
java枚举小例子,简单了解枚举的用法,适合初学者使用。
主要介绍了java 中枚举类enum的values()方法的详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
主要介绍了Java中枚举类型的一种使用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
NULL 博文链接:https://mlaaalm.iteye.com/blog/694720
java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list>
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
enum的全称为enumeration, 是 JDK 1.5中引入的新特性,存放在 java....下面这篇文章是我在使用enum过程中的一些经验和总结,分享出来方便大家快速的掌握Java中枚举(enum),有需要的朋友们下面跟着小编来一起看看吧。
JAVA的枚举实例以及应用
列举java 枚举相关信息列举java 枚举相关信息列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息
【Java面试】枚举从使用到原理
java中enum枚举的详细用法。 0.0
主要介绍了Java中枚举的使用详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
JAVA枚举JAVA枚举
一个简单的例子 让你简单的了解java中枚举给你带来的快了
本篇文章介绍了,在java中枚举的详细使用。需要的朋友参考下
java 枚举ppt 枚举定义 用普通类模拟枚举 带构造方法的枚举 带抽象方法的枚举 单例与枚举 枚举与类集
java枚举状态机