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介绍的主要内容,如果未能解决你的问题,请参考以下文章