为什么在遍历values()时一切都正常,却会出现java.lang.IllegalArgumentException: No enum const class的错误?
为什么在遍历values()时一切都正常,却会出现java.lang.IllegalArgumentException: No enum const class的错误?
这个问题基本上是我之前问题的延伸。我之前的问题是为了确保在类加载时枚举常量被填充。下面是我的类,添加了一个简单的方法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"); }
对于我在这里做错了什么,有什么想法吗?