Java 检查一个枚举对象是否顺序在另一个枚举对象之后?

Java 检查一个枚举对象是否顺序在另一个枚举对象之后?,java,enums,bukkit,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("Smug

我有一个枚举,当我选择一个特定的枚举时(例如:
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;
}
您可以使用枚举类的
ordinal()
方法返回枚举数组中的索引,例如:

Rank.ADMIN.ordinal() < Rank.OWNER.ordinal() // true
Rank.ADMIN.ordinal()

通过这种方式,您可以根据所需的权限和某人的级别检查他是否被允许做任何他想做的事情。假设您将枚举实现中的列组从特权最低的列组排序到特权最高的列组,则这将起作用

有几个选项:

  • 您可以向每个列组添加一个或多个允许其充当的列组,并检查所需的列组是否在您拥有的列组列表中

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

  • 在等级中添加“安全级别”编号,并检查您的等级编号是否高于所需的等级编号


Lucass的想法很有趣,但不允许比单主干更复杂的层次结构

只是为了确保我正确理解您的问题-您想要一种方法来进行“此等级或更高等级”检查吗?