当前位置: 首页 > 面试题库 >

扩展Java枚举

章安宜
2023-03-14
问题内容

我有一个枚举,我们称它为A:

public enum A
{
    A,
    B
}

我有一个需要枚举A的函数:

public void functionA(A enumA)
{
    //do something
}

如何创建另一个枚举,可能调用B并传递给 functionA ?像这样吗

public enum B
{
    C
}

functionA(B.C);

我知道您无法扩展枚举,但是我还有哪些其他选择?实现此目标的最佳方法是什么?


问题答案:

你不能

枚举类型在设计上是最终的。

原因是每个枚举类型都应 具有 在枚举中声明的元素 (例如,我们可以在switch语句中使用它们),如果允许扩展类型,则不可能。

您可能会执行以下操作:

public interface MyInterface {
    // add all methods needed here
}

public enum A implements MyInterface {
    A, B;
    // implement the methods of MyInterface
}

public enum B implements MyInterface {
    C;
    // implement the methods of MyInterface
}

请注意,然后无法switch使用此接口进行操作。(或者通常有一个switch带有可能来自多个对象的对象enum)。



 类似资料:
  • 问题内容: 这是我要完成的工作,我有一个包含一些值的枚举的类,我想对该类进行子类化并向该枚举添加更多值。这是一个不好的例子,但是: 因此HexDigits.Digit包含所有十六进制数字。那可能吗? 问题答案: 不,这不可能。最好的办法是使两个枚举实现和接口,然后使用该接口代替枚举。所以:

  • 问题内容: 是否有比这更好的“解决方法”?访问TableMap上的方法时,我想避免使用PREFIX(局部变量)。 解决方法! 需要! 整个代码示例: 问题答案: 我认为您可能正在尝试将过多的情报投入其中。 我发现这种方法非常有用。它避免了由于无法扩展s 而引起的许多问题(实际上,您可以但不能以非常有用的方式)。 本质上,将其作为子类并将其特性作为传递给您的超类。这样,您仍然可以获得包括类型安全性在

  • 问题内容: 只是在玩,并想出了一个甜蜜的方法来使用此方法在JavaEnum toString()方法中向s 添加功能。 一些进一步的修改使我 几乎 也可以添加整洁的(即不引发异常)反向查找,但是存在问题。报告: 有办法吗? 这里的目的是(通过一个接口实现,使用像我在链接的答案中添加的方法一样)静默地添加一个在不引发异常的情况下执行该功能的方法。可能吗?现在显然可以扩展- 到目前为止,我的主要Jav

  • 问题内容: 我想知道为什么在Java语言中a 不能扩展。 我不是在谈论一个延伸的(这不能做,因为Java没有多重继承,而Š隐含延长),但一类的以只添加额外的方法,而不是额外的枚举值。 就像是: 要这样使用: 因此,有人可以对此限制提供理由(或将我指向正确的JLS部分)吗? 问题答案: 我认为 他们这样做 的答案来自以下问题: 在您的示例中,如何实例化MyClass?用户永远不会(通过)显式实例化枚

  • 问题内容: 我想扩展ArrayList,为特定类添加一些方法,这些类的实例将由扩展的ArrayList保存。下面是一个简化的说明性代码示例。 这对我来说似乎是明智的,但是我对Java还是很陌生,我看到了其他阻碍扩展ArrayList的问题,例如,扩展ArrayList和创建新方法。我对Java的理解不够了解。 在我先前的尝试中,我最终在ThingContainer中创建了许多实际上是传递给Arra

  • 问题内容: 有这样的事情: 抽象类: 和扩展器: 我想要的是扩展,因为如果不处理它,然后尝试在中处理它。例如add- 但同时让类处理默认值,例如。 这是完全错误的方法吗? 到目前为止,我所做的就是添加一个接口。通常: 在课堂上: 在课堂上: 这看起来像是可用的设计吗? 并且,主要问题: 有没有什么好办法扩展该类,以便可以使用与in 中相同的切换方法?我想知道的是,有没有一个更好的设计,第二个是是否