根据JAVA中的value参数指定枚举值

时间:2015-10-09 09:51:15

标签: java enums

我有一个卡片类:

public class Card{        
    private final Rank rank;
    public Rank rank() { return rank; }
    public Card(Rank rank) {
        this.rank = rank;
    }    
}

Rank是枚举的枚举:

enum Rank {
    TWO ("2"),
    THREE ("3"),
    FOUR ("4"),
    private final String rankNum;
    private Rank(String rankNum) { this.rankNum = rankNum; }
    public String rankNum(){ return rankNum; }
}

所以我的目标是输入一个字符串" 2"作为命令行参数,然后创建一个新的卡对象,其等级值为TWO。如果输入是" TWO"然后就可以做到这一点,但如果输入是" 2"我不知道怎么做。

如果输入是" TWO"我会做以下事情:

Card firstCard = new Card(Rank.args[0]);

我希望这个问题没有措辞得太厉害或明显,因为你可以说我还处于早期阶段,但我已经搜索了这个问题几个小时但没有用。

5 个答案:

答案 0 :(得分:0)

如果您的预期输入为"2"(而不是"TWO"),则可以在枚举中添加实用程序静态方法。

以下内容:

public static Rank forValue(String value) {
    // null/empty check
    if (value == null || value.isEmpty()) {
        throw new IllegalArgumentException();
    }
    // iterates enum values
    for (Rank r : Rank.values()) {
        // found a match
        if (r.rankNum().equals(value)) {
            return r;
        }
    }
    // iteration over, no match found
    throw new NoSuchElementException();
}

答案 1 :(得分:0)

你做不到。您应检查命令行参数是否等于任何Rank值,然后创建新卡

答案 2 :(得分:0)

使用Rank.lookupByNumber(“2”)获得Rank.TWO

import java.util.HashMap;

enum Rank {
    TWO("2"), THREE("3"), FOUR("4");

    private static final HashMap<String, Rank> lookupTable = new HashMap<>();

    static {
        for (Rank rank : Rank.values()) {
            lookupTable.put(rank.rankNum, rank);
        }
    }

    private final String rankNum;

    private Rank(String rankNum) {
        this.rankNum = rankNum;
    }

    public String rankNum() {
        return rankNum;
    }

    public static Rank lookupByNumber(String number) {
        return lookupByNumber(number);
    }
}

在静态块中,使用您提供的字符串初始化lookupTable作为键。因此,您可以非常轻松快速地通过提供的字符串获取Rank枚举

答案 3 :(得分:0)

没有其他方法可以遍历Enum的值,并检查您的给定值是否与Enum常量中的任何值匹配。

String value = //given value Ex: "2"
for (Rank rank : Rank.values()) {
        if (rank.rankNum().equals(value)) {
            return rank;
        }
}

答案 4 :(得分:-1)

这个怎么样?

public enum Rank {

    TWO ("2"),
    THREE ("3"),
    FOUR ("4");

    private String description;

    private Rank(final String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return this.description;
    }

主:

public static void main( String[] args ) throws Exception {

    if(args.length > 0) {
        String rank = args[0].trim();
        if (rank.equals(Rank.TWO.toString())) {
            System.out.println("entered rank is: " + Rank.TWO.getDescription());
        }
    }
}