[解決済み】java.lang.IllegalArgumentExceptionの理由は何ですか?values()を繰り返し実行するのは問題ないのに、enum constクラスがない?
2022-01-27 01:17:18
質問
この質問は、基本的に私の
前回の質問
. 私は前の質問で、クラスがロードされるときにEnum定数が入力されていることを確認するように尋ねました。ここに、簡単なメソッドを追加した私のクラスが再びあります。
getByName
:
public enum PropName {
CONTENTS("contents"),
USE_QUOTES("useQuotes"),
ONKEYDOWN("onkeydown"),
BROWSER_ENTIRE_TABLE("browseEntireTable"),
COLUMN_HEADINGS("columnHeadings"),
PAGE_SIZE("pageSize"),
POPUP_TITLE("popupTitle"),
FILTER_COL("filterCol"),
SQL_SELECT("sqlSelect"),
;
private String name;
private PropName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public static PropName getByName(String name){
return PropName.valueOf(name);
}
}
メソッドの呼び出し
getByName("columnHeadings")
を投げています。
java.lang.IllegalArgumentException: No enum const class labware.web.component.limsgrid.PropName.columnHeadings
しかし、このメソッドを次のコードに置き換えると、ちょうど動作します。
public static PropName getByName(String name){
for(PropName prop : values()){
if(prop.getName().equals(name)){
return prop;
}
}
throw new IllegalArgumentException(name + " is not a valid PropName");
}
何が間違っているのか、何か思い当たることはありますか?
解決方法は?
Enum.valueOf()
は定数名しかチェックしないので、定数名を渡す必要があります。
"COLUMN_HEADINGS"
の代わりに、"columnHeadings" を使用します。あなたの
name
プロパティはEnumの内部とは関係ありません。
コメントにある疑問・不安の解消に。
enumの"builtin"(暗黙のうちに宣言されている)。
valueOf(String name)
メソッドは、その正確な名前の enum 定数を検索します。入力が "columnHeadings" であれば、(少なくとも)3つの選択肢があることになります。
-
命名規則を少し忘れて、最も理にかなっているように定数を命名してください。
enum PropName { contents, columnHeadings, ...}
. これが一番便利なのは明らかです。 -
を呼び出す前に、キャメルケースの入力を UPPER_SNAKE_CASE に変換してください。
valueOf
もし、あなたが本当に命名規則が好きなら。 -
組み込みのルックアップ・メソッドではなく、独自のルックアップ・メソッドを実装します。
valueOf
を使用して、入力に対応する定数を探します。これは、同じ定数セットに対して複数のマッピングの可能性がある場合に、最も理にかなっています。
関連
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み】純粋なJUnitテストにVisibleForTestingを使用する方法
-
[解決済み】enum変数のデフォルト値は何ですか?
-
[解決済み] Enumのvalues()メソッドのドキュメントはどこにあるのでしょうか?
最新
-
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.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み] "java.nio.charset.MalformedInputException" を避けるために、すべての包括的なCharset。入力の長さ= 1"?