【问题标题】:Access enums through command line [duplicate]通过命令行访问枚举[重复]
【发布时间】:2013-06-09 17:15:53
【问题描述】:
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 Test David 然后它应该打印“23”。

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

请解释一下..

【问题讨论】:

标签: java command-line enums


【解决方案1】:

你的解决方案:

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 Child sam:不存在名为 sam 的孩子
java Child : 请提供孩子的名字

希望这能解决你的问题

【讨论】:

    【解决方案2】:

    您可以执行以下操作

    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());
           }
       }
    
    }
    

    输出如下

    Name is David and age is 23
    Name is Johnson and age is 34
    Name is Brackley and age is 19
    

    【讨论】:

      【解决方案3】:

      您需要将命令行中的 String arg 转换为枚举值。

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

      【讨论】:

        【解决方案4】:

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

        注意:如果找不到,则抛出 IllegalArgumentException...您必须明确地捕获它,因为这是一个未经检查的异常。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-13
          • 2014-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-14
          • 2017-03-12
          相关资源
          最近更新 更多