是否可以扩展 Java 枚举?

2022-09-02 00:32:53

以下是我想要完成的,我有一个类,它有一些值的枚举,我想子类化它并向枚举添加更多值。这是一个不好的例子,但是:

public class Digits
{
 public enum Digit
 {
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9
 }
}

public class HexDigits extends Digits
{
 public enum Digit
 {
  A, B, C, D, E, F
 }
}

因此,HexDigits.Digit 包含所有 Hex Digits。这可能吗?


答案 1

不,这是不可能的。您可以做的最好的方法是使两个枚举实现和接口,然后使用该接口而不是枚举。所以:

interface Digit {
  int getValue();
}

enum Decimal implements Digit {
  ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE;

  private final int value;

  Decimal() {
    value = ordinal();
  }

  @Override
  public int getValue() {
    return value;
  }
}

enum Hex implements Digit {
  A, B, C, D, E, F;

  private final int value;

  Hex() {
    value = 10 + ordinal();
  }

  @Override
  public int getValue() {
    return value;
  }
}

答案 2

哈哈

枚举不能被子类化。

这里的理由是枚举定义了固定数量的值。子类化会打破这一点。