我有一组需要从Excel工作表导入的数据,让我们举一个最简单的例子。注意:数据最终可能支持上传任何语言环境。
e.g。假设表示用户的字段之一是性别映射到枚举并存储在数据库中,对于男性为0,对于女性为1。 0和1是短值。
如果我必须导入值,我不能指望用户打入数字(因为它们不直观且在枚举较大时很麻烦),映射到枚举的正确方法是什么。
我们是否应该要求他们在这些情况下提供字符串值(例如男性或女性),并通过拧干方法将变换提供给我们代码中的枚举public static性别Gender.fromString(String value)
答案 0 :(得分:2)
您不需要写fromString
; enum
种类型已有static valueOf(String)
:
public class EnumValueOf {
enum Gender {
MALE, FEMALE;
}
public static void main(String[] args) {
Gender g = Gender.valueOf("MALE");
System.out.println(g);
// prints "MALE"
System.out.println(g == Gender.MALE);
// prints "true"
}
}
它有点隐藏,但这是在JLS中指定的。
JLS 8.9 Enums
此外,如果
E
是enum
类型的名称,则该类型具有以下隐式声明的static
方法:/** * Returns an array containing the constants of this enum * type, in the order they're declared. This method may be * used to iterate over the constants as follows: * * for(E c : E.values()) * System.out.println(c); * * @return an array containing the constants of this enum * type, in the order they're declared */ public static E[] values(); /** * Returns the enum constant of this type with the specified * name. * The string must match exactly an identifier used to declare * an enum constant in this type. (Extraneous whitespace * characters are not permitted.) * * @return the enum constant with the specified name * @throws IllegalArgumentException if this enum type has no * constant with the specified name */ public static E valueOf(String name);
答案 1 :(得分:0)
提供静态方法对我来说很好。然后,在应用程序中只有一个点,您关心从用户输入到Gender对象的转换。
正如您提到的本地化,第二种方法
public static Gender Gender.fromString(String value, Locale locale);
可能是一个好主意。