在Java Main方法的命令行参数中指定“用法”的正确方法是什么?

时间:2013-10-03 18:46:30

标签: java command-line command-line-arguments

我有一个主方法,它接受无限数量的参数。

它的形式为:

    if (args.length == 0) {
        // This is what I would like to explain better
        System.out.println("Usage: selectField1 [...] whereConditionField:Value [...]");
        System.exit(0);
    }
    List<String> selectList = new ArrayList<String>();
    BooleanQuery booleanQuery = new BooleanQuery();
    for (String arg : args) {

        if (arg.contains(":")) {
            // Argument is a WHERE condition
            String[] keyValue = arg.split(":");
            Term term = new Term(keyValue[0], keyValue[1]);
            booleanQuery.add(new TermQuery(term), BooleanClause.Occur.MUST);
        } else {
            // Argument is a SELECT field
            selectList.add(arg);
        }
    }

在Usage输出中解释这个的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一个主观问题,因为对某些人来说容易理解的事情对其他人来说可能很难。您可以使用类似于某些linux命令工具的格式,例如:

man cat 

输出:

NAME
    cat - concatenate files and print on the standard output

SYNOPSIS
    cat [OPTION]... [FILE]...

[OPTION]...表示法广泛用于表示多个(可选)参数。另外,以命令行utillty zip为例,当你运行它时不会输出选项:

Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
...

明确表示您希望zipfile list易于用户理解。

在您的情况下,例如:

Usage: [SELECT_FIELD]... [WHERE_CONDITION_FIELD:VALUE]...

Usage: [field_list] [condition_pair_list]

或任何其他组合......有一件事是肯定的,如果您希望您的用户了解命令行程序的正确用法,没有什么比这更好的了,打印格式与一个(或几个)用法示例:

Usage: [SELECT_FIELD]... [WHERE_CONDITION_FIELD:VALUE]...
Example:  
       java programName field1 condition1:Test field2 conditionName:foo