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;
从前面已经知道,使用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;
相关文章推荐
- Java编程思想-19枚举类型
- 02_java基础_数组、集合、枚举
- Java_19_枚举(enum)
- JAVA | 19 - 枚举
- [2014-09-02]JAVA笔记_枚举(Enumeration)
- 19---java中枚举01(枚举的作用)
- thinking-in-java(19)枚举类型
- 19---java中枚举03(类集对枚举的支持)
- 02-19 17:57:05.024: E/AndroidRuntime(27831): java.lang.RuntimeException: Unable to start activity
- 19---java中枚举04(枚举的其他应用)
- Java 枚举:覆写 toString,再看 equals、hashCode
- Java sdut acm 1959 简单枚举类型——植物与颜色
- java 中枚举类型,整型,字符串之间转换
- Java_02_如何查看Servlet、JSP的版本(Tomcat V7.0.37)
- java1.5新特性之枚举
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(二)【基本数据类型的自动拆箱与装箱,枚举】以及享元设计模式
- Java 笔记02
- Java基础知识笔记:泛型和枚举
- Java-枚举
- Java之反射、枚举、内省、注解