关于Java:通过命令行访问枚举

Access enums through command line

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
enum Child {
    David(23),
    Johnson(34),
    Brackley(19);
  }

  int age;

  Child(int age) {
    this.age=age;
  }

  void getAge() {
    return age;
  }

  public class Test {
    public static void main(String args[]) {
    ---------------------
  }
}

如果我必须输入命令行参数,例如,如果我输入Java测试戴维然后打印"23"。

那么我们如何通过命令行访问枚举呢?主要方法应该写什么?

请解释一下……


您需要将字符串arg从命令行转换为枚举值。

1
Child c = Child.valueOf(args[0]);

使用Enum.valueOf()。它以枚举类和字符串作为参数,并尝试通过该名称查找枚举。

注:如未找到则抛出IllegalArgumentException…因为这是一个未经检查的异常,所以必须显式地捕获它。

另一种解决方案是在枚举类本身上使用.valueOf()(MyEnum.valueOf("whatever"))。与异常处理相同的警告适用。


你的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public enum Child {

    David(23),
    Johnson(34),
    Brackley(19);

    private int age;

    private Child(int age) {
        this.age=age;
    }

    int getAge(){
        return age;
    }

    public static Child getAgeFromName(String name) {
        for(Child child : Child.values()) {
            if(child.toString().equalsIgnoreCase(name)) {
                return child;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        if(args.length != 0) {
            Child child = Child.getAgeFromName(args[0]);
            if(child != null) {
                System.out.println(args[0] +" age is" + child.getAge());
            }else {
                System.out.println("No child exists with name" + args[0]);
            }
        } else {
            System.out.println("please provide a child name");
        }


    }
}

输入:输出Java儿童戴维:戴维年龄为23岁Java子山姆:没有名字山姆存在Java子:请提供子名称

希望这能解决你的问题


您可以执行以下操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
enum Child {
   David(23),
   Johnson(34),
   Brackley(19);

 int age;

 Child(int age) {
   this.age=age;
 }

 public int getAge() {
   return age;
 }

   public static void main(String args[])
   {
       for(Child c : Child.values())
       {
               //Here you can check for you equality of name taken as command line arg
           System.out.println("Name is" + c +" and age is" + c.getAge());
       }
   }

}

输出如下

1
2
3
Name is David and age is 23
Name is Johnson and age is 34
Name is Brackley and age is 19