【问题标题】: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"))。应用与异常处理相同的警告。