5

我想知道我们是否可以拥有 char 类型的 enaum 值?我想做这样的事情:

public enum Enum    {char X, char Y};
...
Enum a=Enum.X
if (a=='X')
{// do something}

无需调用任何额外的函数将 enum 转换为 char(因为我希望它已经是 char )。有没有办法这样做?

  • 事实上,我试图通过这种方式定义一个 char 类型的受限变量,它只接受两个 char 值“X”或“Y”之一。因此,如果我们提供其他任何内容,例如“z”,编译器就会抱怨。
4

1 回答 1

20

不。

但是转换方法一点也不难。

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.*(始终导入)更常见。

于 2013-01-07T19:51:59.663 回答