枚举Enum类型

本文详细探讨了Java中的枚举类型Enum的使用,包括如何创建和使用枚举、添加方法、在switch语句中的应用、values()方法的特殊性、通过实现接口进行分类、EnumSet和EnumMap的运用,以及常量相关方法和多路分发的概念。重点讨论了枚举在多路分发中的作用和其实现方式。
摘要由CSDN通过智能技术生成

目录

 

1.如何用

2.向enum添加方法

3.switch中使用enum

4.values()并不是Enum的方法

5.对Enum进行分类只能实现接口

6.EnumSet

7.EnumMap

8.常量相关的方法

9.多路分发(重点这里,说一下我的讲解)

使用enum分发

使用常量相关方法分发

EnumMap分发、二维数组分发(简单但是容易出错,不安全),这里不做讲解了


1.如何用

enum Shrubbery { GROUND, CRAWLING, HANGING }

public class EnumClass {
  public static void main(String[] args) {
    for(Shrubbery s : Shrubbery.values()) {
      print(s + " ordinal: " + s.ordinal());
      printnb(s.compareTo(Shrubbery.CRAWLING) + " ");
      printnb(s.equals(Shrubbery.CRAWLING) + " ");
      print(s == Shrubbery.CRAWLING);
      print(s.getDeclaringClass());
      print(s.name());
      print("----------------------");
    }
    // Produce an enum value from a string name:
    for(String s : "HANGING CRAWLING GROUND".split(" ")) {
      Shrubbery shrub = Enum.valueOf(Shrubbery.class, s);
      print(shrub);
    }
  }
} /* Output:
GROUND ordinal: 0
-1 false false
class Shrubbery
GROUND
----------------------
CRAWLING ordinal: 1
0 true true
class Shrubbery
CRAWLING
----------------------
HANGING ordinal: 2
1 false false
class Shrubbery
HANGING
----------------------
HANGING
CRAWLING
GROUND
*///:~

上述例子中基本是enum的一个方法不细讲,同时可以直接静态调用如Shrubbery.GROUND。

2.向enum添加方法

enum除了不能继承之外,可以把其看做是一个正常的类。所以可以为其添加方法

public enum OzWitch {
  // Instances must be defined first, before methods:
  WEST("A"),
  private String description;
  // Constructor must be package or private access:
  private OzWitch(String description) {
    this.description = description;
  }
  public String getDescription() { return description; }
  public static void main(String[] args) {
    for(OzWitch witch : OzWitch.values())
      print(witch + ": " + witch.getDescription());
  }
} /* Output:
WEST: A
*///:~

也可以覆盖方法,下面覆盖上面例子toString()方法

public enum OzWitch {
  // Instances must be defined first, before methods:
  WEST("A"),
  private String description;
  // Constructor must be package or private access:
  private OzWitch(String description) {
    this.description = description;
  }
   @Override
  public String toString() {
    return "aaaaa";
  }

  public String getDescription() { return description; }
  public static void main(String[] args) {
    for(OzWitch witch : OzWitch.values())
      print(witch + ": " + witch.getDescription());
  }
} /* Output:
WEST: aaaaa
*///:~

3.switch中使用enum

enum Signal { GREEN, YELLOW, RED, }

public class TrafficLight {
  Signal color = Signal.RED;
  public void change() {
    switch(color) {
      // Note that you don't have to say Signal.RED
      // in the case statement:
      case RED:    color = Signal.GREEN;
                   break;
      c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值