您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第14章:枚举】_Enum
发布时间:2021-01-05 17:10:22编辑:雪饮阅读()
enum实例的ordinal方法可以获取每个枚举值所属的编号
enum会为每个枚举值进行编号
enum Color{RED,GREEN,BLUE;};
public class Hello{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.println(c.ordinal()+" --> "+c.name());
}
}
};
enum还支持类集的玩法
只是要注意其构造时候有点特殊,修饰符只能是private
enum Color{
RED("红色"),GREEN("绿色"),BLUE("蓝色");
private Color(String name){
this.setName(name);
}
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
};
public class Hello{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.println(c.ordinal()+" --> "+c.name()+"("+c.getName()+")");
}
}
};
D:\>javac Hello.java
D:\>java Hello
0 --> RED(红色)
1 --> GREEN(绿色)
2 --> BLUE(蓝色)
除了能用私有构造方式实现枚举值对象的属性设置以外,也可以像普通类的实例一样通过外部来设置
enum Color{
RED,GREEN,BLUE;
private String name;
public void setName(String name){
switch(this){ // 判断操作的是那个枚举对象
case RED:{
if("红色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case GREEN:{
if("绿色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case BLUE:{
if("蓝色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
}
this.name = name ;
}
public String getName(){
return this.name;
}
};
public class Hello{
public static void main(String args[]){
Color c = Color.BLUE ; // 得到兰色
c.setName("兰色") ; // 名字错误
c.setName("蓝色") ; // 名字正确
System.out.println(c.getName()) ;
}
};
D:\>javac Hello.java
D:\>java Hello
设置内容错误。
蓝色
比较之后发现还是构造的方式更简洁
除了用”枚举类.枚举值”的形式去获取一个枚举实例,还可以通过valueOf来获取一个枚举值的实例
enum Color{
RED,GREEN,BLUE;
private String name;
public void setName(String name){
switch(this){ // 判断操作的是那个枚举对象
case RED:{
if("红色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case GREEN:{
if("绿色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case BLUE:{
if("蓝色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
}
this.name = name ;
}
public String getName(){
return this.name;
}
};
public class Hello{
public static void main(String args[]){
Color c = Color.valueOf(Color.class,"BLUE") ; // 得到兰色
c.setName("兰色") ; // 名字错误
c.setName("蓝色") ; // 名字正确
System.out.println(c.getName()) ;
}
};
D:\>javac Hello.java
D:\>java Hello
设置内容错误。
蓝色
这种方式实现,看起来可读性并不高,只是逼格高一点。
enum枚举类型既然支持类集玩法,那么对enum枚举类型排序也可以用到TreeSet接口
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
enum Color{
RED,GREEN,BLUE;
};
public class Hello{
public static void main(String args[]){
Set<Color> t = new TreeSet<Color>() ;
t.add(Color.GREEN);
t.add(Color.RED);
t.add(Color.BLUE);
Iterator<Color> iter = t.iterator() ;
while(iter.hasNext()){
System.out.println(iter.next()) ;
}
}
};
D:\>javac Hello.java
D:\>java Hello
RED
GREEN
BLUE
关键字词:enum,枚举,java
上一篇:【第14章:枚举】_枚举的作用