5

char型のenaum値を持つことができるかどうか疑問に思いましたか?私はこのようなことをしたいと思います:

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

列挙型をcharに変換するための追加の関数を呼び出さずに(すでにcharにしたいので)。そうする方法はありますか?

  • 実際、この方法で、2つのchar値「X」または「Y」のいずれか1つのみを受け入れるchar型の制限付き変数を定義しようとしています。そのため、「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フィールド/コンストラクターが気に入らない場合は、ゲッターをとして実装することもできます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 に答える