我有一个卡片类:
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]);
我希望这个问题没有措辞得太厉害或明显,因为你可以说我还处于早期阶段,但我已经搜索了这个问题几个小时但没有用。
答案 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());
}
}
}