Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
2022-02-11 23:47:58
Enumとswitchの組み合わせで一度だけ定数表現が必要なことを記憶している。
最初の
- switchの場合、定数、コンパイル時に認識される量しか使用できない。
- Enumの使用
zookeeperの使い方を利用して、通常の状態比較をしているコードを見てみましょう。
@Override
public void processResult(int rc, String s, Object o, Stat stat) {
boolean exists;
switch (rc) {
case KeeperException.Code.OK.intValue:
exists = true;
break;
...
}
}
今回は
Constant expression required
エラー
CodeのEnumクラスを見てみましょう。
public static enum Code implements KeeperException.CodeDeprecated {
CodeDeprecated { OK(0),
SYSTEMERROR(-1),
RUNTIMEINCONSISTENCY(-2),
DATAINCONSISTENCY(-3),
CONNECTIONLOSS(-4),
MARSHALLINGERROR(-5),
UNIMPLEMENTED(-6),
OPERATIONTIMEOUT(-7),
BADARGUMENTS(-8),
APIERROR(-100),
NONODE(-101),
NOAUTH(-102),
BADVERSION(-103),
NOCHILDRENFOREPHEMERALS(-108),
NODEEXISTS(-110),
NOTEMPTY(-111),
SESSIONEXPIRED(-112),
INVALIDCALLBACK(-113),
INVALIDACL(-114),
AUTHFAILED(-115),
SESSIONMOVED(-118),
NOTREADONLY(-119);
private static final Map<Integer, KeeperException.Code> lookup = new HashMap();
private final int code;
private Code(int code) {
this.code = code;
}
public int intValue() {
return this.code;
}
public static KeeperException.Code get(int code) {
return (KeeperException.Code)lookup.get(code);
}
static {
Iterator i$ = EnumSet.allOf(KeeperException.Code.class).iterator();
while(i$.hasNext()) {
KeeperException.Code c = (KeeperException.Code)i$.next();
lookup.put(c.code, c);
}
}
クラスで定義された intValue() メソッドを経由して対応する Enum の int 値を取得することはできますが、これは明示的ではなく(対応する値を決定するためにメソッドを実行する必要がある)、java は実行時ではなくコンパイル時に値を決定できることを明確にする必要があります。
というのが正しい使い方であるはずです。
@Override
public void processResult(int rc, String s, Object o, Stat stat) {
boolean exists;
KeeperException.Code code = KeeperException.Code.get(rc);
switch (code) {
case KeeperException.Code.OK:
exists = true;
break;
...
}
}
この時点では、codeもOKもコンパイル時の確定値です。コンパイルは成功です。
関連
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
final, finally, finalizeの違いについて話してください。
-
SpringBootApplication を型解決できない。
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決
-
「リソースリーク:'scanner'が閉じない」警告、Scannerステートメントでの解決法
-
スレッド "main "での例外 java.lang.NullPointerException どのようにそれを解決するには?
-
アイデア2021.2が起動しないことを一度記録した
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
プロジェクトの依存関係を解決できなかった 解決
-
JQuery DataTable 详解
-
自動配線された依存性のインジェクションに失敗しました。
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
response.sendRedirectによる不具合とその対処法
-
宣言されたパッケージ XX は、期待されるパッケージ src.main.java.XX と一致しません。
-
Java静的コード解析 - 仕様チェック - checkstyle
-
引数型[java.lang.String]の名前がありません..........................。.バグ処理