首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以扩展Java枚举吗?

可以扩展Java枚举吗?
EN

Stack Overflow用户
提问于 2010-04-15 09:57:39
回答 3查看 22.9K关注 0票数 22

这是我想要实现的,我有一个类,它有一个包含一些值的枚举,我想对它进行子类化,并向枚举中添加更多的值。这是一个不好的例子,但是:

代码语言:javascript
复制
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包含所有十六进制数字。这有可能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-15 10:00:26

不不可能。您可以做的最好的事情是使两个枚举实现和接口,然后使用该接口代替枚举。所以:

代码语言:javascript
复制
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;
  }
}
票数 38
EN

Stack Overflow用户

发布于 2010-04-15 10:01:39

不是的。

枚举不能被子类化。

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

票数 6
EN

Stack Overflow用户

发布于 2017-12-17 20:36:20

这不可能。这是有原因的。想象一下,你可以扩展一个枚举:

代码语言:javascript
复制
enum A { ONE, TWO }
enum B extends A { THREE }  // for a total { ONE, TWO, THREE }

现在你可以这样做了:

代码语言:javascript
复制
B b = B.THREE
A a = b  // a = B.THREE ?

但是对于AB.THREE不是一个有效的选项。

当然,你也可以让它们不是多态的,但这并不是真正的扩展。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2642281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档