この質問は基本的に私のprevious questionの拡張です。前回の質問では、クラスが読み込まれたときにEnum定数が設定されていることを確認しました。ここにある私のクラスは、簡単な方法getByName
の添加で再びです:java.lang.IllegalArgumentExceptionの理由は何ですか:values()を反復処理しても問題ありませんが、enum constクラスはありません。
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に "name"という名前のプロパティを定義しないでください。別の値を返すname()とgetName()があります... –