在Java中是否有一种定义字符类型枚举的方法?

5
我想知道是否可以使用char类型的枚举值?我想要做这样的事情:
public enum Enum    {char X, char Y};
...
Enum a=Enum.X
if (a=='X')
{// do something}

不调用任何额外的函数将枚举转换为字符(因为我希望它已经是字符)。有没有办法做到这一点?

  • 实际上,我正在尝试定义一个受限变量类型为 char,只接受两个 char 值 'X' 或 'Y'。因此,如果我们给出其他任何值,例如 'z',编译器将会报错。

为什么必须是 char 类型?它不能保持标准的 enum 类型吗? - us2012
1
枚举类型是对象,而不是字符。 - Peter Lawrey
1个回答

21

不行。

但转换方法并不难。

public enum SomeChar {
    X('X'), Y('Y');

    public char asChar() {
        return asChar;
    }

    private final char asChar;

    SomeChar(char asChar) {
        this.asChar = asChar;
    }
}

然后:

if (a.asChar() == 'X') { ... }

如果你不喜欢asChar字段/构造函数,你甚至可以实现getter为return name().charAt(0)

如果你正在使用lombok,那么这将变得更加容易:

@RequiredArgsConstructor
@Getter
public enum SomeChar {
    X('X'), Y('Y');
    private final char asChar;
}

if (a.getAsChar() == 'X') { ...

顺便说一下,命名为Enum的枚举类型会令人困惑,因为大多数人在源代码中看到Enum都会认为它是java.lang.Enum。通常情况下,阴影化一个常用或已导入的类名是有风险的,而没有比java.lang.*(这个总是被导入)更常被导入的类了。



1
请查看:枚举教程 页面。 - will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接