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("脱光");

    }

}