可以在Java 8中扩展枚举吗?

可以在Java 8中扩展枚举吗?,第1张

可以在Java 8中扩展枚举吗?

您使设计过于复杂。如果您愿意接受

default
只能在实例上调用方法,那么整个代码可能如下所示:

interface ReverseLookupSupport<E extends Enum<E>> {    Class<E> getDeclaringClass();    default E lookup(String name) {        try { return Enum.valueOf(getDeclaringClass(), name);        } catch(IllegalArgumentException ex) { return null; }    }}enum Test implements ReverseLookupSupport<Test> {    FOO, BAR}

您可以使用以下方法进行测试:

Test foo=Test.FOO;Test bar=foo.lookup("BAR"), baz=foo.lookup("BAZ");System.out.println(bar+"  "+baz);

非抛出/捕获的替代方案是:

interface ReverseLookupSupport<E extends Enum<E>> {    Class<E> getDeclaringClass();    default Optional<E> lookup(String name) {        return Stream.of(getDeclaringClass().getEnumConstants())          .filter(e->e.name().equals(name)).findFirst();}

使用像:

Test foo=Test.FOO;Test bar=foo.lookup("BAR").orElse(null), baz=foo.lookup("BAZ").orElse(null);System.out.println(bar+"  "+baz);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5499928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存