enum 定义枚举类

枚举类和普通类的区别:
  – 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
  –枚举类的构造器只能使用 private 访问控制符
  –枚举类的所有实例必须在枚举类中显式列出(, 分隔    ; 结尾). 列出的实例 系统会自动添加 public static final 修饰
  – 所有的枚举类都提供了一个 values 方法, 该方法可以很方便地遍历所有的枚举值
 
JDK 1.5 新增的 enum 关键字用于定义 枚举类
JDK 1.5 中可以在 switch 表达式中使用枚举 类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定
若枚举只有一个成员, 则可以作为一种单子模式的实现方式
 
 
枚举类的属性:
枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
枚举类使用 private final 修饰的属性应该在构造器中为其赋值
若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
 
使用 Enum 定义的 Season:
public enum Season{

    

    //枚举类的实例需要在枚举类的第一行列出

    SPRING("春天","春风又绿江南岸"),

    SUMMER("夏天","映日荷花别样红"),

    AUTUMN("秋天","秋水共长天一色"),

    WINTER("冬天","窗含西岭千秋雪");

    

    

    final String SEASON_NAME;

    final String SEASON_DESC;//加上final后不能修改该属性

    

    private Season(String seasonName,String seasonDesc) {

        this.SEASON_DESC = seasonDesc;

        this.SEASON_NAME = seasonName;

    }

}

 枚举类常用的方法:

public class EunmTest {



    public static void main(String[] args) {

        

        System.out.println(Season.AUTUMN.SEASON_NAME+":"+Season.AUTUMN.SEASON_DESC);//访问枚举类中的属性

        

        //1.遍历枚举类的方法:每个枚举类都有一个values()方法,返回枚举类对象的数组

        Season[] season = Season.values();

        for (Season seasons : season) {

            System.out.println(seasons);

        }

        

        

        //2.把一个字符串转为对应的枚举类对象

        String input = "SPRING";//通过该字符串获取它对应的枚举类对象

        //第一个参数是枚举类的类型,第二个参数是对应的字符串

        Season s = Enum.valueOf(Season.class, input);

        System.out.println(s);

        

    }

}

 

 

 

 

实现接口的枚举类
和普通 Java 类一样枚举类可以实现一个或多个接口
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方 式, 则可以让每个枚举值分别来实现该方法
 
public enum Season implements Info{

    

    //枚举类的实例需要在枚举类的第一行列出

    SPRING("春天","春风又绿江南岸"),

    SUMMER("夏天","映日荷花别样红"),

    AUTUMN("秋天","秋水共长天一色"),

    WINTER("冬天","窗含西岭千秋雪");

    

    

    final String SEASON_NAME;

    final String SEASON_DESC;//加上final后不能修改该属性

    

    private Season(String seasonName,String seasonDesc) {

        this.SEASON_DESC = seasonDesc;

        this.SEASON_NAME = seasonName;

    }



    @Override

    public String getInfo() {

        switch(this){

            case SPRING:return "A";

            case SUMMER:return "B";

            case AUTUMN:return "C";

            case WINTER:return "D";

        }

        return null;

    }

}
public class EunmTest {



    public static void main(String[] args) {

    

        System.out.println(Season.AUTUMN.getInfo());

    }

}

 

另一种方法:即在声明每个对象的时候都单独去覆盖接口中的方法
public enum Season implements Info{

    

    //枚举类的实例需要在枚举类的第一行列出

    SPRING("春天","春风又绿江南岸"){

        @Override

        public String getInfo() {

            return "^^A";

        }

    },

    SUMMER("夏天","映日荷花别样红"){

        @Override

        public String getInfo() {

            return "^^B";

        }

    },

    AUTUMN("秋天","秋水共长天一色"){

        @Override

        public String getInfo() {

            return "^^C";

        }

    },

    WINTER("冬天","窗含西岭千秋雪"){

        @Override

        public String getInfo() {

            return "^^D";

        }



    };

    

    

    final String SEASON_NAME;

    final String SEASON_DESC;//加上final后不能修改该属性

    

    private Season(String seasonName,String seasonDesc) {

        this.SEASON_DESC = seasonDesc;

        this.SEASON_NAME = seasonName;

    }

    

}
public class EunmTest {



    public static void main(String[] args) {

        Season[] season = Season.values();

        

        for (Season seasons : season) {

            System.out.println(seasons.getInfo());

        }

    }

}

 

 

你可能感兴趣的:(enum)