枚举的概念与使用方法
为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?
这是枚举中定义常量的方法:
enum EnumTest {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
//遍历所有的枚举常量
public class demo1 {
public static void main(String[] args) {
//返回具有指定名称的指定枚举类型的枚举常量。
System.out.println(EnumTest.valueOf("MON"));
for(EnumTest EnumTest : EnumTest.values()){
System.out.println(EnumTest);
}
}
}
这是通常定义常量的方法:
class EnumTest{
public final static String MON = "星期一";
public final static String TUE = "星期二";
public final static String WED = "星期三";
public final static String THU = "星期四";
public final static String FRI = "星期五";
public final static String SAT = "星期六";
public final static String SUN = "星期日";
}
能看出枚举不能直接定义具体的值,但是枚举类型提供了构造函数,我们可以通过构造函数和覆写toString 方法来实现
enum EnumTest {
MON("星期一",1),
TUE("星期二",2),
WED("星期三",3),
THU("星期四",4),
FRI("星期五",5),
SAT("星期六",6),
SUN("星期日",7);
private String description;
private int id;
EnumTest(String description, int id) {
//很容易理解我们这里需要什么数据类型就生成相应参数的构造方法
this.description = description;
this.id = id;
}
@Override
public String toString() {
return "EnumTest{" +
"description='" + description + '\'' +
", id=" + id +
'}';
}
}
public class demo1 {
public static void main(String[] args) {
for(EnumTest EnumTest : EnumTest.values()){
System.out.println(EnumTest.toString());
}
}
}
通过查看文档了解到enum 实现了comparable借口所以枚举类型本身是可以排序的通过代码来了解一下:
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
enum EnumTest{
MON,TUE,WED;
}
public class demo1 {
public static void main(String[] args) {
Set<EnumTest> set = new TreeSet<EnumTest>();
set.add(EnumTest.MON);
set.add(EnumTest.WED);
set.add(EnumTest.TUE);
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
通过结果我们可以看出set集合自动排序了