在Java中有一种方法来定义char类型的枚举

C g*_*ics 5 java enums

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

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

没有调用任何额外的函数将枚举转换为char(因为我希望它已经是char).有办法吗?

  • 实际上这种方式我试图定义一个char类型的限制变量,它只接受两个char值'X'或'Y'中的一个.因此,如果我们提供其他任何内容,例如'z',编译器会抱怨.

ysh*_*vit 17

没有.

但转换方法根本不是很难.

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

    public char asChar() {
        return asChar;
    }

    private final char asChar;

    SomeChar(char asChar) {
        this.asChar = asChar;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

if (a.asChar() == 'X') { ... }
Run Code Online (Sandbox Code Playgroud)

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

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

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

if (a.getAsChar() == 'X') { ...
Run Code Online (Sandbox Code Playgroud)

顺便说一下,一个名为enum的枚举Enum会令人困惑,因为大多数人会Enum在源头看到并假设它java.lang.Enum.通常,遮蔽常用/导入的类名是危险的,并且类的导入不会比导入的更常见java.lang.*(总是导入).