是否可以扩展Java Enums?

Cas*_*eyB 20 java enums

这是我想要完成的,我有一个类具有一些值的枚举,我想继承它并为枚举添加更多的值.这是一个不好的例子,但是:

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
 }
}
Run Code Online (Sandbox Code Playgroud)

这样HexDigits.Digit包含所有十六进制数字.那可能吗?

cle*_*tus 35

不,这是不可能的.您可以做的最好的事情是制作两个枚举器和接口,然后使用该接口而不是枚举.所以:

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;
  }
}
Run Code Online (Sandbox Code Playgroud)


Thi*_*ilo 6

没有.

枚举不能被子类化.

这里的推理是枚举定义了固定数量的值.子类化会破坏这一点.