检查Enum对象是否在另一个Enum对象之后顺序执行?

时间:2014-08-28 11:05:05

标签: java enums bukkit

我有一个枚举,当我选择一个特定的(例如:Rank.MOD)时,我想对MOD上方的其他枚举启用特定权限。

例如,Bukkit命令需要Rank.MOD。如果玩家是Rank.ADMIN,我也需要允许执行此命令。

public enum Rank {
    STARTER("Starter", 0, false),
    PRODUCER("Producer", 20000, false),
    DEALER("Dealer", 50000, false),
    SMUGGLER("Smuggler", 100000, false),
    POLICE("Police", 0, false),
    MOD("Mod", 0, true),
    ADMIN("Admin", 0, true),
    OWNER("Owner", 0, true);

    private String rankName;
    private int rankCost;
    private boolean staff;

    Rank(String rankName, int rankCost, boolean staff) {
        this.rankName = rankName;
        this.staff = staff;
    }

    public String getName() {
        return this.rankName;
    }

    public int getCost() {
        return this.rankCost;
    }

    public boolean isStaff() {
        return this.staff;
    }
}

这是我检查等级的地方。

if ( !PlayerData.get().getRank(this.cmdSender).equals(this.rank.getName())) {
    cmdSender.sendMessage(F.parse("Permission", "You need the " +
        C.rank("[" + this.rank.getName()+ "]") +
        " rank to execute this command."));
    return false;
}

2 个答案:

答案 0 :(得分:2)

您可以使用Enum类的ordinal()方法返回枚举数组中的索引,例如:

Rank.ADMIN.ordinal() < Rank.OWNER.ordinal() // true
通过这种方式,您可以根据所需的权限和某人的等级进行检查,如果他允许他做任何他想做的事情。假设您在枚举实现中将排名从最低特权到最高特权排序,这将起作用。

答案 1 :(得分:1)

有几个选择:

  • 您可以向每个排名添加一个或多个允许其作为的排名,并检查所需的排名是否在您所拥有的排名列表中。

  • 创建单独的权限枚举并在安全检查中使用它们(类似于上面的那个)

  • 添加&#34;安全级别&#34;要排名的号码,并检查您的排名的排名是否高于所需的排名

卢卡斯的想法很有意思,但不允许比单一主干更复杂的层次结构