假设我有一个枚举类型,内容如下:
public enum Blah {
A, B, C, D
}
我想要根据一个字符串找到对应的枚举值,例如 "A"
对应的是 Blah.A
。有什么方法可以实现吗?
Enum.valueOf()
是我需要的方法吗?如果是,我该如何使用它?
假设我有一个枚举类型,内容如下:
public enum Blah {
A, B, C, D
}
我想要根据一个字符串找到对应的枚举值,例如 "A"
对应的是 Blah.A
。有什么方法可以实现吗?
Enum.valueOf()
是我需要的方法吗?如果是,我该如何使用它?
创建一个扩展函数,然后调用valueOf<MyEnum>("value")
。如果类型无效,则会返回null,需要进行处理。
inline fun <reified T : Enum<T>> valueOf(type: String): T? {
return try {
java.lang.Enum.valueOf(T::class.java, type)
} catch (e: Exception) {
null
}
}
或者,您可以设置默认值,调用valueOf<MyEnum>("value", MyEnum.FALLBACK)
,避免出现空响应。您可以扩展特定的枚举类型以使默认值自动化。
inline fun <reified T : Enum<T>> valueOf(type: String, default: T): T {
return try {
java.lang.Enum.valueOf(T::class.java, type)
} catch (e: Exception) {
default
}
}
或者如果你想要两个,就把第二个加上:
inline fun <reified T : Enum<T>> valueOf(type: String, default: T): T = valueOf<T>(type) ?: default
public enum DivisionType {
DEFAULT(0){
@Override
public void sort(List<SigInUserDto> SigInUserDtos) {
SigInUserDtos.sort(new SigInUserCoinsQueueComparator());
}
},
ASSIGNPOINTS(1) {
@Override
public void sort(List<SigInUserDto> SigInUserDtos) {
SigInUserDtos.sort(new SigInUserPointsComparator());
}
},
ASSIGNEVENORDER(2) {
@Override
public void sort(List<SigInUserDto> SigInUserDtos) {
SigInUserDtos.sort(new SigInUserOrderCountComparator());
}
};
public final Integer label;
DivisionType(Integer label) {
this.label = label;
}
public static DivisionType getTypeById(Integer id) {
for (DivisionType value : DivisionType.values()) {
if (value.label == id) {
return value;
}
}
return DEFAULT;
}
public abstract void sort(List<SigInUserDto> SigInUserDtos);
}