列舉與抽象方法

列舉可以定義抽象方法,每個 enum 成員都需要實現這些方法。

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

這允許每個列舉成員為給定操作定義自己的行為,而不必在頂級定義中的方法中切換型別。

請注意,此模式是使用多型和/或實現介面通常實現的簡短形式。