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

在Java枚举中重写valueof()和toString()

伯洋
2023-03-14
问题内容

enum中的值是需要在其中包含空格的单词,但是枚举的值中不能包含空格,因此将它们全部堆积在一起。我想重写toString()以将这些空间添加到我告诉的位置。

当我valueOf()在与添加空格相同的字符串上使用时,我还希望该枚举提供正确的枚举。

例如:

public enum RandomEnum
{
     StartHere,
     StopHere
}

电话toString()上的RandomEnum,其值是StartHere返回字符串"Start Here"。调用valueof()相同的字符串("Start Here")会返回枚举值StartHere

我怎样才能做到这一点?


问题答案:

您可以尝试此代码。由于无法覆盖valueOf方法,因此必须定义一个自定义方法(getEnum在下面的示例代码中),该方法将返回所需的值并更改客户端以改为使用此方法。

public enum RandomEnum {

    StartHere("Start Here"),
    StopHere("Stop Here");

    private String value;

    RandomEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return this.getValue();
    }

    public static RandomEnum getEnum(String value) {
        for(RandomEnum v : values())
            if(v.getValue().equalsIgnoreCase(value)) return v;
        throw new IllegalArgumentException();
    }
}


 类似资料:
  • 问题内容: 我需要重新实现一些枚举的enum.valueof方法,以使它们不再抛出异常,而如果枚举中不存在值,则它们仅返回null。 我正在尝试基本 但是它不起作用,说我需要重写或实现一个超级类型。 我猜想我可以开设一个超级班,但是我不确定如何将它们放在一起。有任何想法吗? 问题答案: 你不能 您必须定义另一个不同的方法。valueOf方法由编译器自动生成。

  • 我刚刚注意到javadoc状态(强调为我的): 返回声明中包含的此枚举常量的名称。该方法可能被重写,尽管它通常不是必需的或不需要的。当存在更“程序员友好”的字符串窗体时,枚举类型应重写此方法。 默认情况下,和返回相同的内容,因此即使被重写,仍然可以通过方法访问枚举的名称。 编辑:供参考,的javadoc(强调与原文相同): 返回此枚举常量的名称,与在其枚举声明中声明的名称完全相同。大多数程序员应该

  • 谁能解释一下 和 我经常使用前一个示例(可能太频繁了,没有足够的封装),但我从未使用过第二个示例。 谢啦 枚举

  • 问题内容: 我在Java类中具有以下内容: 我有更多需要类的类,它们具有相同的属性和相同的构造函数,但具有不同的常量。因此,在另一堂课中,我需要以下内容: 如果这是一个类,则可以使用继承来不重复构造函数中的代码(并且可能会对该属性进行获取)。为了在每次需要这种重复时不再重复自己,我该 怎么办?理想情况下,我只想为each指定常量,并保留构造函数和属性。 问题答案: 在这种情况下可能会有所帮助。鉴于

  • 问题内容: 这件事让我困扰了一阵子。我之前曾问过一些问题,但措辞可能很拙劣,而且例子太抽象了。所以目前尚不清楚我实际上在问什么。我会再尝试。并且请不要下结论。我希望这个问题根本不容易回答! 为什么我不能在Java中使用带有泛型类型参数的枚举? 问题不在于语法上为什么不可能做到这一点。我知道这只是不受支持。问题是:为什么JSR人员会“忘记”或“忽略”这个非常有用的功能?我无法想象与编译器相关的原因,

  • 在核心Java中,抽象类Java。lang.Enum是所有Java枚举类型的基类。有一些常见的方法,例如: 然而,正如我们所知,还有一种常用的方法公共静态