19.枚举类型

1.静态导入enum
  public enum Spiciness{NOT,MILD,MEDIUM,HOT,FLAMING }
  在其他类中应用如果
  import static package.Spiciness.*;
  那么在直接用NOT就行,不用enum类型修饰enum的实例。
  如果enum在默认包里,或者在同一文件里,则无法使用这一特性。
2.enum中添加方法
  enum除了不能继承自一个enum,基本可以看成一个常规类。可以有方法,甚至有main方法。
所有的枚举值都是public,static,final
3.switch和enum结合
  如: enum Signal{GREEN,YELLOW,RED}
  Signal color=Signal.RED;
  switch(color){
   case Signal.RED: color = Signal.GREEN;
                    break;
   } 
4.enum的values()和oridinal
  所有enum都继承自ENUM类,但是ENUM类中没有values()方法,它是编译器加上的static方法。
  oridinal返回枚举值在枚举类中的顺序。
5.实现,而非继承
  enum都继承自java.lang.Enum类,所以不能再多重继承,只能实现一个或多个接口。
6.EnumSet 
   EnumSet必须和一个enum一起工作 

  例子:
  package enumerated;
  public enum AlarmPoints {
  STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3,
  OFFICE4, BATHROOM, UTILITY, KITCHEN
  }   
 
 package enumerated;
import java.util.*;
import static enumerated.AlarmPoints.*;
import static net.mindview.util.Print.*;

public class EnumSets {
  public static void main(String[] args) {
    EnumSet<AlarmPoints> points =
      EnumSet.noneOf(AlarmPoints.class); // Empty set
    points.add(BATHROOM); //1.加单个值
    print(points);
    points.addAll(EnumSet.of(STAIR1, STAIR2, KITCHEN)); //2.加多个值
    print(points);
    points = EnumSet.allOf(AlarmPoints.class); //3.加所有值
    points.removeAll(EnumSet.of(STAIR1, STAIR2, KITCHEN)); //3.删除多个值
    print(points);
    points.removeAll(EnumSet.range(OFFICE1, OFFICE4)); //4.删除这个范围内的值
    print(points);
    points = EnumSet.complementOf(points); //5.去反
    print(points);
  }
} /* Output:
1.[BATHROOM]
2.[STAIR1, STAIR2, BATHROOM, KITCHEN]
3.[LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4, BATHROOM, UTILITY]
4.[LOBBY, BATHROOM, UTILITY]
5.[STAIR1, STAIR2, OFFICE1, OFFICE2, OFFICE3, OFFICE4, KITCHEN]

7.EnumMap
package enumerated;
import java.util.*;
import static enumerated.AlarmPoints.*;
import static net.mindview.util.Print.*;

interface Command { void action(); }

public class EnumMaps {
  public static void main(String[] args) {
    EnumMap<AlarmPoints,Command> em =
      new EnumMap<AlarmPoints,Command>(AlarmPoints.class);
    em.put(KITCHEN, new Command() {
      public void action() { print("Kitchen fire!"); } //加入键值对,值为匿名对象
    });
    em.put(BATHROOM, new Command() {
      public void action() { print("Bathroom alert!"); }
    });
    for(Map.Entry<AlarmPoints,Command> e : em.entrySet()) {
      printnb(e.getKey() + ": ");
      e.getValue().action();  //调用值对应的对象的方法
    }
    try { // If there's no value for a particular key:
      em.get(UTILITY).action();
    } catch(Exception e) {
      print(e);
    }
  }
} /* Output:
BATHROOM: Bathroom alert!
KITCHEN: Kitchen fire!
java.lang.NullPointerException
*///:~

8.常量相关的方法
  public enum ConstantSpecificMethod {
  DATE_TIME {
    String getInfo() {    //定义各自不同的行为
      return
        DateFormat.getDateInstance().format(new Date());
    }
  },
  CLASSPATH {
    String getInfo() {
      return System.getenv("CLASSPATH");
    }
  },
  VERSION {
    String getInfo() {
      return System.getProperty("java.version");
    }
  };
  abstract String getInfo();//为每个enum实例定义的抽象方法,也可以定义多个,然后每个实例实现。
  public static void main(String[] args) {
    for(ConstantSpecificMethod csm : values())
      System.out.println(csm.getInfo());
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值