public static <E extends Enum<E>> boolean validateEnum(Class<E> clazz, String s) {
return EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(s));
}
以下是上述方法的示例调用
boolean isValid = validateEnum(Animal.class, "DOG");
boolean isValid = validateEnum(Color.class, "Red");
可以使用Java 8 FunctionalInterface
实现相同的功能。我尝试创建BiPredicate
,但尝试此操作时遇到编译器错误。
final BiPredicate<String,Class> biPre = (string1, clazz) -> EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(s));
答案 0 :(得分:6)
这是一种实现方式,
constructor(props) {
super(props);
this.state = getUserData();
}
updateUsername(username) {
this.setState({ username });
setUserData({ username }); // Assuming this one
}
这是客户端代码,
final BiPredicate<String, ? super Enum<?>> biPre = (string1, enumType) -> EnumSet
.allOf(enumType.getDeclaringClass()).stream().anyMatch(e -> e.name().equals(string1));
但是,在此处传递枚举常量而不是类文字似乎有点尴尬。
如果您确实需要使用类型令牌,则应该这样做,
boolean test = biPre.test("DOG", Animal.CAT);
客户端现在看起来像这样
final BiPredicate<String, Class<? extends Enum<?>>> biPre = (string1, clazz) -> Arrays
.stream(clazz.getEnumConstants()).anyMatch(e -> e.name().equals(string1));
答案 1 :(得分:2)
您必须声明将biPre
定义为类似于函数validateEnum
的类。
public class Test<E extends Enum<E>> {
BiPredicate<String,Class<E>> biPre = (string1,clazz) -> EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(string1));
}
然后您可以像这样测试它:
boolean isValid = biPre.test( "DOG", (Class<E>) Animal.class);