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

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();
}

枚举可实现接口,并可以在每个值上提供特定的实现。  

你可能感兴趣的:(java,jdk5)