Java枚举类的⾼级⽤法说明
public enum Color{
RED, BLUE, BLACK, YELLOW, GREEN
}
Color c = Color.RED;
如上,是我们通常使⽤枚举类型的常⽤⽅式。
从编写⽅式上看,enum很像是特殊的class,实际上enum声明定义的类型就是⼀个类。⽽这些类都是类库中Enum类的⼦类。查看编译之后的字节码⽂件可以发现enum类型被单独编译成了字节码⽂件Color.class。
Compiled from "Color.java"
public final class Color extends java.lang.Enum<Color> {
public static final Color RED;
public static final Color BLUE;
public static final Color BLACK;
public static final Color YELLOW;
public static final Color GREEN;
public static Color[] values();
public static Color valueOf(java.lang.String);
enum类型如何使用static {};
}
由上可知:
1. enum类型是⼀个不可以被继承的final类。其枚举值都是Color类型的类静态常量(这也是为什么enum会⼤写的原因)。
2. 既然是类,所以enum类型也有构造函数,⽅法和域。不过enum类型与⼀般class有很⼤的不同:
(1)构造函数只会在构造枚举值的时候被调⽤
enum Color{
RED(255, 0, 0), BLUE(0, 255, 0), GREEN(0, 0, 255);//注意此处必须有分号
private Color(int r, int g, int b){
this.r = r;
this.g = g;
this.b = b;
}
private int r, g, b;
public String toString(){
String() + "(" + r + ", " + g + ", " + b + ")";
}
}
(2) 为了确保构造函数不会被外部调⽤,因此构造函数必须是private的。
(3) 所有enum类型都会继承Enum.java的⽅法,包括:
a. ordinal()⽅法:返回枚举值在enum类中的顺序。这个顺序依据枚举值声明时的顺序⽽定。
idinal(); //返回结果:0
b. compareTo()⽅法:
Color.REDpareTo(Color.BLUE); //返回结果:-1
c. toString():返回枚举值的名称
String(); //返回结果:RED
d. values():返回⼀个包含全部枚举值的数组
Color[] colors = Color.values();
e. valueOf():返回枚举值常量
Color.valueOf("BLUE"); //返回结果:Color.BLUE
d. equals() : ⽐较两个枚举类对象的引⽤。
public final boolean equals(Object other){
return this == other;
}
注意:枚举类和枚举值的不同
如上,这样我们知道了枚举值带⽅法和变量时的原理和⽤法。因此enum还有⼀个⽤法是实现接⼝。public enum Color implements IColor{
RED("红⾊", 1), GREEN("绿⾊", 2), BLUE("蓝⾊", 3);
private Color(String name, int value){
this.name = name;
this.value = value;
}
private String name;
private int value;
@Override
public String getName(){
return this.name;
}
@Override
public int getValue(){
return this.value;
}
}
需要注意的是,哪些⽅法是给枚举类调⽤的,哪些⽅法是给枚举值调⽤的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论