java 带有抽象方法的枚举示例

枚举可以定义抽象方法,每个枚举成员都需要实现这些方法。

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