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

JDK 1.5 新特性学习笔记(3)

2011-06-18 20:31 543 查看
4. Enum

4.1 枚举的特征

枚举是类的一种

枚举扩展自java.lang.Enum

枚举中每一个声明的值是枚举类型的一个实例

枚举没有公共的构造方法

枚举中的值都是public static final的

枚举中的值可以用==或equals()方法判等

枚举实现了java.lang.Comparable接口,可以通过compareTo()方法进行比较

枚举覆写了toString()方法,返回枚举中值的名称

枚举提供了valueOf()方法返回枚举的值(注:valueOf()方法与toString()方法对应,如果改变了toString()方法,请同时修改valueOf()方法)

枚举定义了一个final的实例方法ordinal(),返回值在枚举中的整数坐标,以0开始(注:一般由其他辅助设施使用,不直接在代码中使用)

枚举定义了values()方法,返回枚举中定义的所有值(一般在遍历时使用)

4.2 枚举的组成

枚举类型的基本组成元素包括:

enum关键字

名称

允许使用的值的列表

除上述基本元素,枚举类型还可以:

实现接口

定义变量

定义方法

与值对应的类的定义体

4.3 代码示例

4.3.1 创建枚举类型

public enum Grade { A, B, C, D, F, INCOMPLETE };


这是枚举类型的最基本的创建方式,也是最常用的方式。

4.3.2 内联方式(inline)创建

枚举还可以通过内联方式创建:

public class Report {
public static enum Grade1 {A, B, C}; // the "static" keyword is redundant.
public enum Grade2 {A, B, C};
}


注意static关键字是默认的,不需显式声明。

4.3.3 定义变量和方法

public enum Grade {
// enum values must be at the top.
A("excellent"),
B("good"),
C("pass"),
F("fail"); // there is a semicolon.

// field
private String description;

// the constructor must be private(the compiler set it by default)
// so it can be omitted.
private Grade(String description) {
this.description = description;
}

// method
public String getDescription() {
return this.description;
}
}


枚举的值定义在最上方,最后一个值的定义由";"结束。

构造器必须为private,由编译器自动添加,不需显式声明。

4.3.4 与值对应的类的定义体

public enum Grade implements Descriptable {
A("excellent") {
@Override
public String getDescription() {
return "congratulations! you got an excellent grade!";
}
},
B("good") {
@Override
public String getDescription() {
return "well done! your grade is good!";
}
},
C("pass") {
@Override
public String getDescription() {
return "you passed the exam.";
}
},
F("fail") {
@Override
public String getDescription() {
return "sorry, you failed the exam!";
}
};

private String description;

Grade(String description) {
this.description = description;
}
}

public interface Descriptable {
String getDescription();
}


枚举可实现接口,并可以在每个值上提供特定的实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: