枚举

来源:互联网 发布:淘宝销售额怎么算 编辑:程序博客网 时间:2024/06/03 17:15

【参考资料】

javaenum(枚举)使用详解+总结http://www.cnblogs.com/hyl8218/p/5088287.html

Java枚举7常见种用法http://www.iteye.com/topic/1116193

 

枚举的本质其实就是一个类(继承自java.lang.Enum),


 

只不过定义的时候要指定好值集合,使用的时候只能用值集合中的值赋值。

值集合其实就是这个类的成员常量。


 

定义

1、普通的定义如下

 Java Code 

 

enum Signal1 {
    RED, GREEN, YELLOW
}

 

2、还可以添加成员变量和成员方法(值集合后面要加分号)

 Java Code 

 

enum Signal2 {
    RED, GREEN, YELLOW;
// 值集合后面要加分号

    
// 成员变量
    private int index;
    
private String name;

    
public int getIndex() {
        
return index;
    }

    
public void setIndex(int index) {
        
this.index = index;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

}

 

3、还可以添加构造函数,但是添加了构造函数后,指定值集合时也要使用构造函数

(所以Java不能像C++一样指定值的index,只能通过这种方式扩展)

 Java Code 

 

enum Signal3 {
    RED(
0"red"), GREEN(1"green"), YELLOW(2"yellow");// 值集合后面要加分号

    
private Signal3(int index, String name){
        
this.index=index;
        
this.name=name;
    }
    
    
// 成员变量
    private int index;
    
private String name;

    
public int getIndex() {
        
return index;
    }

    
public void setIndex(int index) {
        
this.index = index;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

}

 

4、由于已经继承了Enum,所以定义的时候不能再继承其他类(可以重写Enum的方法),但是可以实现接口.

 Java Code 

 

interface Behaviour {  
    
void print();  
}  

enum Signal4 
implements Behaviour {
    RED(
0"red"), GREEN(1"green"), YELLOW(2"yellow");// 值集合后面要加分号

    
private Signal4(int index, String name){
        
this.index=index;
        
this.name=name;
    }
    
    
// 成员变量
    private int index;
    
private String name;

    
public int getIndex() {
        
return index;
    }

    
public void setIndex(int index) {
        
this.index = index;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

    @Override
    
public void print() {
        
    }

}

 

使用

使用的时候只能用值集合中的值赋值。

可以像普通对象一样调用枚举对象的方法。(当然也可以使用Enum类中的方法)

 Java Code 

 

Signal4 s=Signal4.RED;
System.out.println(s.getName());

//还可以调用Enum类中的方法        
for (Signal4 ss : Signal4.values()) {//遍历枚举类中的值集合
    System.out.println(ss.ordinal());
    System.out.println(ss.name());
}

 

还可以将枚举对象用于switch语句中(此时case语句中可以省略枚举类型前缀)

 Java Code 

 

switch (s) {
case RED://这里是Signal4.RED
    
    
break;

default:
    
break;
}

Signal3 sss=Signal3.RED;
switch (sss) {
case RED://这里是Signal3.RED //编译的时候竟然能够自动区分前缀
    
    
break;

default:
    
break;
}

 

0 0
原创粉丝点击