Java``valueOf()
为每个Enum<T>
对象提供一种方法,因此给一个enum
类似
public enum Day {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
一个人可以像
Day day = Day.valueOf("Monday");
如果传递给的字符串valueOf()
与现有Day
值不匹配(区分大小写),IllegalArgumentException
则将引发an 。
要进行不区分大小写的匹配,可以在Day
枚举内编写自定义方法,例如
public static Day lookup(String day) {
for (Day d : Day.values()) {
if (d.name().equalsIgnoreCase(day)) {
return type;
}
}
return null;
}
假设方法是在编译时隐式添加到类中,是否有任何通用方法可以不编写值或任何其他额外对象的缓存,而只编写一次lookup()
上述方法(例如,不是每个方法)?enum``values()``Enum<E>
这种“通用” lookup()
方法的签名将类似于该Enum.valueOf()
方法,即:
public static <T extends Enum<T>> T lookup(Class<T> enumType, String name);
并且它将Day.lookup()
为任何对象完全实现该方法的功能enum
,而无需为每个方法重写相同的方法enum
。
我发现获取泛型的特殊混合有些棘手,但这是可行的。
public static <T extends Enum<?>> T searchEnum(Class<T> enumeration,
String search) {
for (T each : enumeration.getEnumConstants()) {
if (each.name().compareToIgnoreCase(search) == 0) {
return each;
}
}
return null;
}
例
public enum Horse {
THREE_LEG_JOE, GLUE_FACTORY
};
public static void main(String[] args) {
System.out.println(searchEnum(Horse.class, "Three_Leg_Joe"));
System.out.println(searchEnum(Day.class, "ThUrSdAy"));
}
如果在不同的目录中写入两个具有相同不区分大小写名称的公共Java类,那么这两个类在运行时都不可用。(我在Windows、Mac和Linux上测试了HotSpot JVM的几个版本。如果有其他JVM可以同时使用,我不会感到惊讶。(例如,如果我创建一个名为的类和一个名为的类,如下所示: 我的网站上提供了三个包含上述代码的eclipse项目。 如果尝试我调用在两个类上像这样: typechecker成功
问题内容: 默认情况下,django的url解算器似乎执行区分大小写的搜索来解析url,并区分’/ Login’和’login’。我的网址格式如下。 谁能指导我,如何使Django URL不区分大小写? 问题答案: 只需放在每个字符串的开头,即: 告诉每个RE不区分大小写地匹配
在执行MySQL 数据库给数据表改名时,发现报错,如下: 从提示中可以看出 blog_comment,表已经存在,可登录 MySQL 客户端查看数据表,并没有看到这张表。 提示中所说目标表并不存在。手动执行改名SQLRENAME TABLE blog_Comment TO blog_comment;,报同样错误:Table 'blog_comment' already exists。 从网上找一些
我有一些字符串(字符串结果),用户插入它在应用程序中没有任何大小写敏感策略用户可以插入,如:“fail”或“fail”或“fail”或“success”或“success”等。而且我只有一个方法用于它们,如fail()、success()和must call related method 现在,我想通过使用以下常量(成功、失败、...)将一个字符串使用到开关大小写语句中: 请注意: 1-我不想为结
问题内容: 我正在尝试考虑在PHP中实现不区分大小写的file_exists函数的最快方法。我最好的选择是枚举目录中的文件,并进行strtolower()与strtolower()的比较直到找到匹配项? 问题答案: 我使用注释中的源代码来创建此功能。返回完整路径文件(如果找到),否则返回FALSE。 在文件名中的目录名称上不区分大小写。
问题内容: 这是我的mysql表的架构,即时通讯使用mysql 5 需要敏感的UNIQUE KEY大小写, 它应该允许输入类似(’a’,0)&(’A’,0)的值 尝试将排序规则更改为latin_1和latin_generic_ci 问题答案: 最简单的是在DDL语句上添加, SQLFiddle演示