Aru*_*unM 6 java generics lambda java-8 java-stream
public static <E extends Enum<E>> boolean validateEnum(Class<E> clazz, String s) {
return EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(s));
}
Run Code Online (Sandbox Code Playgroud)
以下是上述方法的示例调用
boolean isValid = validateEnum(Animal.class, "DOG");
boolean isValid = validateEnum(Color.class, "Red");
Run Code Online (Sandbox Code Playgroud)
可以使用Java 8实现相同的功能FunctionalInterface
.我试过创建一个BiPredicate
但是在编译错误时尝试了这个.
final BiPredicate<String,Class> biPre = (string1, clazz) -> EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(s));
Run Code Online (Sandbox Code Playgroud)
这是一种方法,
final BiPredicate<String, ? super Enum<?>> biPre = (string1, enumType) -> EnumSet
.allOf(enumType.getDeclaringClass()).stream().anyMatch(e -> e.name().equals(string1));
Run Code Online (Sandbox Code Playgroud)
这是客户端代码,
boolean test = biPre.test("DOG", Animal.CAT);
Run Code Online (Sandbox Code Playgroud)
然而,传递枚举常量而不是类文字似乎有点尴尬.
如果你真的需要在这里使用类型令牌,你应该做什么,
final BiPredicate<String, Class<? extends Enum<?>>> biPre = (string1, clazz) -> Arrays
.stream(clazz.getEnumConstants()).anyMatch(e -> e.name().equals(string1));
Run Code Online (Sandbox Code Playgroud)
客户现在看起来像这样,
boolean test = biPre.test("DOG", Animal.class);
Run Code Online (Sandbox Code Playgroud)