【问题标题】:Java Invalid Command Line Arguments ExceptionJava 无效的命令行参数异常
【发布时间】:2012-08-25 20:32:13
【问题描述】:

对于 Java API 中的无效命令行参数,是否有适当的异常类,还是我必须自己创建?我试过搜索,但在 API 中找不到。

这是一个作业,所以我不能使用第三方库进行命令行解析。

【问题讨论】:

    标签: java exception command-line-arguments


    【解决方案1】:

    命令行参数以String[] 的形式出现。如果您希望输入采用某种形式或某种顺序,您可以抛出一个您自己创建的异常来处理它(尽管抛出异常会终止程序;如果出现以下情况,您需要优雅地处理它这是必需的)。

    【讨论】:

      【解决方案2】:

      大多数时候,当接收到的参数无效时,抛出IllegalArgumentException 是一种常见的习惯用法。

      公共类 IllegalArgumentException 扩展 RuntimeException

      抛出 表示方法已通过非法或不适当的 论据。

      【讨论】:

      • 我确实考虑过使用它,但我认为 RuntimeExceptions(未经检查的异常)应该反映程序员做错的问题,而检查的异常将用于程序员无法控制的事情。还是仅在设计 API 时才重要?
      • 我倾向于在程序无法在运行时恢复的情况下使用未经检查的异常。传递给方法的无效参数就是这种情况,这是程序员的错误。例如,当您尝试用 negative 初始容量实例化 ArrayList 时,它将抛出 IllegalArgumentException。为什么?因为它不应该接收它,它不能以负容量工作;这是程序员的错误。这是讨论此问题的链接javapractices.com/topic/TopicAction.do?Id=129
      • 另外,如果你使用检查异常,每个调用你的方法都需要捕获这个异常。恕我直言,这有点奇怪,因为基本上您承认您的代码中可能存在错误,导致将 invalid 值/参数传递给另一个方法。发生这种情况时,您无能为力,只能修复导致此问题的 错误
      • 当程序被赋予无效的命令行参数时,它不是程序员错误,而是用户错误。
      • @Michael:我同意,但是那些无效的参数永远不应该到达不支持它们的方法,它们应该是 pre 验证的。如果他们确实到达,那么可以抛出IllegalArgumentException。现在,如果你想终止程序并向用户显示他传递了无效的参数,那么你可以写信给System.err,告诉他们为什么参数无效。例如,javac 就是这样做的。如果您使用javac -abcd 调用它,它将以消息javac: invalid flag: -abcd 终止;在这种情况下没有理由抛出异常,恕我直言。
      【解决方案3】:

      处理对程序没有意义的未知命令行参数或组合的最佳方法是显示错误消息并提供用法输出。

      就我个人而言,根据命令行的复杂程度,我会创建一个名为“usage”(通常是静态)的方法,可以将可选的错误消息传递给它。

      在解析传递给程序的命令行参数时,我将调用此方法并通过标志或直接退出,或者让usage方法调用为我退出。

      但那只是我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 2011-03-30
        • 2011-05-01
        相关资源
        最近更新 更多