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

时间:2013-01-07 19:47:58

标签: java enums

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

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

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

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

1 个答案:

答案 0 :(得分:16)

没有

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

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.*(总是导入的)导入更多。