Java匹配字符串输入作为枚举

Java匹配字符串输入作为枚举,java,enums,args,Java,Enums,Args,我有一个Java程序,它使用ENUM对不同的字符串进行编码。 现在,我添加了一个主类,它接收来自命令行的一些参数的输入。 问题是用户输入是字符串,但枚举类型是不同的java对象。 代码如下: public static void main(String[] args) { if(args.length!=3) { printUsage(); System.exit(0); } File dbpath = new File( ar

我有一个Java程序,它使用ENUM对不同的字符串进行编码。 现在,我添加了一个主类,它接收来自命令行的一些参数的输入。 问题是用户输入是字符串,但枚举类型是不同的java对象。 代码如下:

public static void main(String[] args) {

    if(args.length!=3)
    {
        printUsage();
        System.exit(0);
    }

    File dbpath = new File( args[0] );
    File file= new File( args[1] );
    String query = args[2];
    Result res = manager.executeQuery(QuerySelector.MYQUERY);
如您所见,第三个参数查询无法与executeQuery的参数匹配,因为它是QuerySelector而不是字符串。 我希望用户只需要键入“MYQUERY”,这是一个字符串(在本例中,有无数个),然后找到一种方法将其插入executeQuery参数中。
您能推荐一种方便的方法吗?

您可以在枚举中创建一个方法,将字符串转换为相应的枚举

public static QuerySelector forName(String query) {
    for (QuerySelector param : QuerySelector.values()) {
        if (query.equals(param.toString()))) {
            return param;
        }
    }
    return null;
}
然后用它来打电话

Result res = manager.executeQuery(QuerySelector.forName(query));

您可以在枚举中创建一个方法,将字符串转换为相应的枚举

public static QuerySelector forName(String query) {
    for (QuerySelector param : QuerySelector.values()) {
        if (query.equals(param.toString()))) {
            return param;
        }
    }
    return null;
}
然后用它来打电话

Result res = manager.executeQuery(QuerySelector.forName(query));

您可以使用
Enum.valueOf(QuerySelector.class,query)
其中query/arg[1]是您的输入字符串参数,但请确保您提供了有效的输入参数,该参数在
QuerySelector
中作为枚举常量存在,否则如果指定的枚举类型没有具有指定名称的常量,它将抛出:>IllegalArgumentException,或者指定的类对象不表示枚举类型您可以使用
enum.valueOf(QuerySelector.class,query)
where query/arg[1]是您的输入字符串参数,但请确保您提供了有效的输入参数,该参数作为枚举常量存在于
QuerySelector
中,否则,如果指定的枚举类型没有具有指定名称的常量,它将抛出:>IllegalArgumentException,或者指定的类对象不代表枚举类型。我认为这种方法几乎是正确的,但它不适合我。因为用户键入的是枚举中列出的一个变量的名称,但此函数与值的比较是相同的。在比较过程中,我使用param.name()解决了此问题。我认为此方法几乎是正确的,但它对我不起作用。因为用户键入的是枚举中列出的一个变量的名称,但此函数的比较是与值的比较。在比较过程中,我使用param.name()解决了此问题。