枚举可以定义抽象方法,每个枚举成员都需要实现这些方法。
enum Action { DODGE { public boolean execute(Player player) { return player.isAttacking(); } }, ATTACK { public boolean execute(Player player) { return player.hasWeapon(); } }, JUMP { public boolean execute(Player player) { return player.getCoordinates().equals(new Coordinates(0, 0)); } }; public abstract boolean execute(Player player); }
这允许每个枚举成员为给定的操作定义自己的行为,而不必在顶级定义中的方法中切换类型。
注意:此模式是使用多态和/或者实现接口通常实现的一种简短形式。
实现接口
这是一个枚举,它也是一个可调用的函数,用于根据预编译的正则表达式模式测试字符串输入。
import java.util.function.Predicate; import java.util.regex.Pattern; enum RegEx implements Predicate { UPPER("[A-Z]+"), LOWER("[a-z]+"), NUMERIC("[+-]?[0-9]+"); private final Pattern pattern; private RegEx(final String pattern) { this.pattern = Pattern.compile(pattern); } @Override public boolean test(final String input) { return this.pattern.matcher(input).matches(); } } public class Main { public static void main(String[] args) { System.out.println(RegEx.UPPER.test("ABC")); System.out.println(RegEx.LOWER.test("abc")); System.out.println(RegEx.NUMERIC.test("+111")); } } Each member of the enum can also implement the method: import java.util.function.Predicate; enum Acceptor implements Predicate { NULL { @Override public boolean test(String s) { return s == null; } }, EMPTY { @Override public boolean test(String s) { return s.equals(""); } }, NULL_OR_EMPTY { @Override public boolean test(String s) { return NULL.test(s) || EMPTY.test(s); } }; } public class Main { public static void main(String[] args) { System.out.println(Acceptor.NULL.test(null)); //true System.out.println(Acceptor.EMPTY.test("")); //true System.out.println(Acceptor.NULL_OR_EMPTY.test(" ")); //false } }
日期:2020-06-02 22:15:21 来源:oir作者:oir