gpt4 book ai didi

Java8 函数式接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:53 26 4
gpt4 key购买 nike

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));

最佳答案

这是一种方法,

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));

客户端现在看起来像这样,

boolean test = biPre.test("DOG", Animal.class);

关于Java8 函数式接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54300764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com