您的位置:首页 > 编程语言 > Java开发

19---java中枚举02(枚举)

2012-03-14 14:45 423 查看
Enum:

从前面已经知道,使用enum关键字可以定义一个枚举,实际上次关键字表示的是

java.lang.Enum类型,即:使用enum声明的枚举类型就相当于定义一个类,而此类

则默认继承java.lang.Enum类。

java.lang.Enum类的定义如下:

public abstract class Enum<E extends Enum<E>>

extends Object

implements Comparable<E>,java.io.Serializable

1、Enum的构造方法:

protected Enum(String name,int ordinal)

构造方法中接受的两个参数,一个表示枚举的名字,另一个表示枚举的序号;

public enum Color{

RED,GREEN,BLUE;

}

RED实际上就表示的是枚举的名字,默认的编号是0;

public class Demo{

public static void main(String args[]){

for(Color c:Color.values()){

System.out.println(c.ordinal()+"---->"+c.name());

}

}

}

以上创建枚举时即写RED时就调用了枚举的构造方法;

如果此时,希望做一些改进,希望可以使用一些文字表示颜色的信息,则可以按照最早的Color类

的形式,在枚举类中定义属性及自己的构造方法,但是一旦定义了有参数的构造之后,在声明

枚举对象的时候就必须明确的调用构造方法,并传递参数;

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 Demo{

public static void main(String args[]){

for(Color c:Color.values()){

System.out.println(c.ordinal()+"---->"+c.name()

+"("+c.getName()+")");

}

}

}

如果现在不想通过构造设置内容,而是希望通过setter()方法设置内容,则就必须按如下执行:

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 Demo{

public static void main(String args[]){

Color c=Color.BLUE;

c.setName("兰色");

c.setName("蓝色");

System.out.println(c.getName());

}

}

还可以这样:

public class Demo{

public static void main(String args[]){

Color c=Color.valueOf(Color.class,"BLUE");

c.setName("兰色");

c.setName("蓝色");

System.out.println(c.getName());

}

}

在枚举中实际上已经实现好了Comparable接口,所以枚举中的内容是可以排序的;

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

enum Color{

RED,GREEN,BLUE;

}

public class Demo{

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()+"、");

}

}

}

TreeSet现实了Comparable接口,实现了排序,如果以上的枚举没有实现Comparable接口的

话输出的结果会按照字母顺序,而现在不是而是按照RED、GREEN、BLUE

由此也可以证明其确实是现在了Comparable;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: