JavaSE进阶
8.1.3 java.lang.Enum类的方法
除了toString方法,都是final修饰的方法,因此都不能重写
还有两个API文档中没有,但枚举类类拥有并且常用的方法
- values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常。
8.1.4 枚举的特别说明
1、枚举中定义属性
- 枚举类对象的属性不应允许被改动, 所以应该使用 private final修饰。不是语法要求,而是语义要求。
- 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
- 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。
package com.enumtype.before15;
public class TestWeekField {
public static void main(String[] args) { Week w = Week.MONDAY; System.out.println(w); } } enum Week{ MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日"); private final String DESCRPTION;
private Week(String dESCRPTION) { DESCRPTION = dESCRPTION; } public String toString(){ return DESCRPTION; } } |
2、枚举类可以自定义方法,静态和非静态
3、枚举类可以实现一个或者多个接口(了解)
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
interface Change{ void degenerate(); } interface Checkable{ void check(); } enum Gender implements Change,Checkable{ MAN{ public void degenerate(){ System.out.println("咔嚓一刀"); } },WOMAN{ public void degenerate(){ System.out.println("比较复杂"); } }; public void check(){ System.out.println("脱光"); } } |