这个问题基本上是我先前问题的扩展。我问了前面的问题,以确保在类加载时填充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内部无关。
要解决评论中的问题/担忧:
枚举的“ builtin”(隐式声明)valueOf(String name)
方法将查找具有该确切名称的枚举常量。如果您输入的是“
columnHeadings”,则(至少)有三个选择:
enum PropName { contents, columnHeadings, ...}
。这显然是最方便的。valueOf
如果您确实喜欢命名约定,请在调用之前将camelCase输入转换为UPPER_SNAKE_CASE 。valueOf
以查找输入的相应常量。如果同一组常量有多个可能的映射,则这最有意义。问题内容: 在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象: 但是,仍然没有实现,这意味着要迭代一个,您必须执行以下操作: 有谁知道为什么仍然不执行? 编辑: 为澄清起见,我不是在谈论枚举的语言概念,而是在Java API中称为“ 枚举 ” 的Java特定类。 问题答案: 枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Ve
问题内容: 对于最小循环,Python 3的枚举速度似乎比Python 2慢得多,而对于新版本的Python 3来说,Python 3的枚举速度似乎越来越差。 我在64位Windows机器(英特尔i7-2700K-3.5 GHz)上安装了Python 2.7.6,Python 3.3.3和Python 3.4.0,同时安装了每个Python的32位和64位版本。虽然在内存访问限制的范围内,给定版本
问题内容: 我已经看过Scala有关模拟Javaenum和case类与Enumeration的问题,但是似乎付出了太多的努力却却获得了太多的好处。 基本上,我希望有一个方法可以返回的所有单例对象,而无需重复几次。 这是我的代码的样子: 该方法应该返回类似如下的内容: 一切都应该发生在特征中,所以我只需要扩展它即可获得功能。 有什么建议可以做到这一点吗?这个想法是访问类并找到它们正在扩展的类的所有单
我听到一些人建议在C++中使用枚举类,因为它们的类型安全。 但这到底意味着什么呢?
flutter是通过什么原理和原生进行交互的?
在哪些情况下,应该使用? 是否只是为了合法性问题? 如果是,那么问题是什么? 因为我仍然使用开发我的所有项目