Javaenum枚举类型⼯具类的⽤法详解
Java enum的⽤法详解
⽤法⼀:常量
在JDK1.5 之前,我们定义常量都是: public static fianl… 。现在好了,有了枚举,可以把相关的常量分组到⼀个枚举类型⾥,⽽且枚举提供了⽐常量更多的⽅法。
public enum Color {
RED, GREEN, BLANK, YELLOW
}
⽤法⼆:switch
JDK1.6之前的switch语句只⽀持int,char,enum类型,使⽤枚举,能让我们的代码可读性更强。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
⽤法三:向枚举中添加新⽅法
如果打算⾃定义⾃⼰的⽅法,那么必须在enum实例序列的最后添加⼀个分号。⽽且 Java 要求必须先定义 enum 实例。
public enum Color {
RED(“红⾊”, 1), GREEN(“绿⾊”, 2), BLANK(“⽩⾊”, 3), YELLO(“黄⾊”, 4);
// 成员变量
private String name;
private int index;
// 构造⽅法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通⽅法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set ⽅法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
⽤法四:覆盖枚举的⽅法
下⾯给出⼀个toString()⽅法覆盖的例⼦。
public class Test {
public enum Color {
RED(“红⾊”, 1), GREEN(“绿⾊”, 2), BLANK(“⽩⾊”, 3), YELLO(“黄⾊”, 4); // 成员变量
private String name;
private int index;
// 构造⽅法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 覆盖⽅法
@Override
public String toString() {
return this.index + "_" + this.name;
}
}
public static void main(String[] args) {
System.out.println(String());
}
}
⽤法五:实现接⼝
所有的枚举都继承⾃java.lang.Enum类。由于Java 不⽀持多继承,所以枚举对象不能再继承其他类。
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour {
RED("红⾊", 1), GREEN("绿⾊", 2), BLANK("⽩⾊", 3), YELLO("黄⾊", 4);
// 成员变量
private String name;
private int index;
// 构造⽅法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 接⼝⽅法
@Override
public String getInfo() {
return this.name;
}
// 接⼝⽅法
@Override
public void print() {
System.out.println(this.index + ":" + this.name);
}
}
⽤法六:使⽤接⼝组织枚举
public interface Food {
enum Coffee implements Food {
BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
}
enum Dessert implements Food {
FRUIT, CAKE, GELATO
}
}
⽤法七:关于枚举集合的使⽤
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,⽽value 则可以是任意类型。关于这个两个集合的使⽤就不在这⾥赘述,可以参考JDK⽂档
枚举和常量定义的区别
⼀、 通常定义常量⽅法
我们通常利⽤public final static⽅法定义的代码如下,分别⽤1表⽰红灯,3表⽰绿灯,2表⽰黄灯。
public class Light {
/* 红灯 */
public final static int RED = 1;
/* 绿灯 */
public final static int GREEN = 3;
/* 黄灯 */
public final static int YELLOW = 2;
}
⼆、 枚举类型定义常量⽅法
枚举类型的简单定义⽅法如下,我们似乎没办法定义每个枚举类型的值。⽐如我们定义红灯、绿灯和黄灯的代码可能如下:
public enum Light {
RED, GREEN, YELLOW;
}
我们只能够表⽰出红灯、绿灯和黄灯,但是具体的值我们没办法表⽰出来。别急,既然枚举类型提供了构造函数,我们可以通过构造函数和覆写toString⽅法来实现。⾸先给Light枚举类型增加构造⽅法,然后每个枚举类型的值通过构造函数传⼊对应的参数,同时覆写toString ⽅法,在该⽅法中返回从构造函数中传⼊的参数,改造后的代码如下:
public enum Light {
// 利⽤构造函数传参
RED(1), GREEN(3), YELLOW(2);
// 定义私有变量
private int nCode;
// 构造函数,枚举类型只能为私有
private Light(int _nCode) {
this.nCode = _nCode;
}
@Override
public String toString() {
return String.valueOf(this.nCode);
}
}
三、 完整⽰例代码
枚举类型的完整演⽰代码如下:
public class LightTest {
// 1.定义枚举类型
public enum Light {
// 利⽤构造函数传参
RED(1), GREEN(3), YELLOW(2);
// 定义私有变量
private int nCode;
// 构造函数,枚举类型只能为私有
private Light(int _nCode) {
this.nCode = _nCode;
this.nCode = _nCode;
}
@Override
public String toString() {
return String.valueOf(this.nCode);
}
}
/
**
*
* @param args
*/
public static void main(String[] args) {
// 1.遍历枚举类型
System.out.println("演⽰枚举类型的遍历 ......");
testTraversalEnum();
// 2.演⽰EnumMap对象的使⽤
System.out.println("演⽰EnmuMap对象的使⽤和遍历.....");
testEnumMap();
/
/ 3.演⽰EnmuSet的使⽤
System.out.println("演⽰EnmuSet对象的使⽤和遍历.....");
testEnumSet();
}
/**
*
* 演⽰枚举类型的遍历
*/
private static void testTraversalEnum() {
Light[] allLight = Light.values();
for (Light aLight : allLight) {
System.out.println("当前灯name:" + aLight.name());
System.out.println("当前灯ordinal:" + dinal());
System.out.println("当前灯:" + aLight);
}
}
java的tostring方法
/**
*
* 演⽰EnumMap的使⽤,EnumMap跟HashMap的使⽤差不多,只不过key要是枚举类型 */

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。