您使设计过于复杂。如果您愿意接受
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);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)