为什么在遍历values()时一切都正常,却会出现java.lang.IllegalArgumentException: No enum const class的错误?

25 浏览
0 Comments

为什么在遍历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");
  }

对于我在这里做错了什么,有什么想法吗?

0