这个问题基本上是我上一个问题的延伸.我问上一个问题,确保在加载类时填充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);
}
}
Run Code Online (Sandbox Code Playgroud)
对方法的调用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");
}
Run Code Online (Sandbox Code Playgroud)
关于我在这里做错了什么想法?
Cos*_*atu 69
Enum.valueOf()只检查常量名称,因此您需要传递它"COLUMN_HEADINGS"而不是"columnHeadings".您的name财产与Enum内部无关.
要解决评论中的问题/疑虑:
枚举的"内置"(隐式声明)valueOf(String name)方法将查找具有该确切名称的枚举常量.如果您的输入是"columnHeadings",则您(至少)有三个选择:
enum PropName { contents, columnHeadings, ...}.这显然是最方便的.valueOf如果您真的喜欢命名约定,请在调用之前将camelCase输入转换为UPPER_SNAKE_CASE .valueOf函数来查找输入的相应常量.如果同一组常量存在多个可能的映射,则这是最有意义的.| 归档时间: |
|
| 查看次数: |
97617 次 |
| 最近记录: |