2014-08-28 104 views
-2

我有一個枚舉,當我選擇一個特定的(例如:Rank.MOD)時,我想對MOD以上的其他枚舉啓用特定權限。檢查Enum對象是否在另一個Enum對象之後順序檢查?

例如,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; 
} 
+1

只是爲了確保我正確地理解你的問題 - 你想辦法做到「這個級別或以上「檢查? – Deltharis 2014-08-28 11:09:52

+0

沒錯。 :) – Biskotaki 2014-08-28 11:13:04

回答

2

可以使用枚舉類ordinal()方法將在枚舉數組中返回索引,以便例如:

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

這樣,如果他讓你可以查看基於所需的權限和別人的等級做他想做的事。假設您將枚舉實現中的等級從最低特權級別改爲最高特權級別,這將會起作用。

1

有幾個選項:

  • 您可以添加到每個排名表或排名,它被允許作爲,並檢查所需要的等級是否在你的排名列表。

  • 創建單獨的權限枚舉並使用這些安全檢查(類似於上面的一個)

  • 添加一個「安全級別」數量排名,並檢查您的排名有排名是否高於所需排名

Lucass想法很有趣,但不允許用於更復雜的層次結構比單幹線

相關問題