【问题标题】:Correct Java Exception for a malfomed string纠正错误字符串的 Java 异常
【发布时间】:2013-10-12 15:38:18
【问题描述】:

我有一个方法应该只接受某种格式的字符串。当格式无效时,我想抛出一个异常。我对 Java 很陌生,所以不确定这里使用的正确异常类型是什么。我发现有一个 IllegalFormatException,它基于名称听起来是正确的,但 the docs 让我对此不太确定。此处使用的正确 Exception 类是什么?

有问题的方法是 PropertyId 类的构造函数,它接受一个字符串参数,它应该匹配 '/^p[1-9][0-9]*$/i'。它的行为应该与this equivalent in Python 基本相同。

我更喜欢使用标准库提供的异常,除非确实没有合适的,或者普遍认为在我的情况下应该创建一个新的异常派生。

【问题讨论】:

  • 你能写出你的格式吗?
  • IllegalArgumentException 或特定于应用程序的异常。
  • 应用程序特定异常的一个论据是您可以获得更多控制权;例如,如果您的异常需要在任何使用它的地方进行处理,Eclipse (IDE) 会发出警告。您无法通过 IllegalFormatException 等运行时异常获得此功能。

标签: java exception


【解决方案1】:

我和@TwoThe 在一起。 IllegalArgumentException 是要走的路。事实上,我实际上认为不应该有太多的争论。这种情况正是 IllegalArgumentException 的用途。

IllegalFormatException 肯定会产生误导,但那(及其子类)是针对完全不同的情况——当您为output 提供的格式字符串无效时。

生成您自己的自定义异常应该非常小心。仅当您有不适用标准例外的特殊情况时。这不是真的,除非绝对必要,否则您不希望您的客户不得不处理非标准的东西。

记住,权力越大,责任越大。

【讨论】:

  • 另外你可以在构造过程中随时为异常添加特定的错误描述。
【解决方案2】:

这对我来说是合理的,来自 IllegalFormatException 的 Javadoc

当格​​式字符串包含非法时抛出未经检查的异常 与给定不兼容的语法或格式说明符 论据。只有此异常的显式子类型对应 应该实例化特定的错误。

正如@BasvandenBroek 指出的那样,这适用于包含格式信息的字符串,而不是检查字符串的格式。

但是,它的父级 IllegalArgumentException 可能是最好的。 NumberFormatException 很接近,但不合适,它的父级也是 IAE。

注意:您可以创建自己的 IllegalArgumentException 子类

public class StringValidationFailedException extends IllegalArgumentException {
     public StringValidationFailedException(String message) {
          super(message);
     }
}

【讨论】:

  • 我不太确定,这看起来像是专门用于格式化某些内容的字符串,即 %d,而不是一般字符串的格式。
【解决方案3】:

【讨论】:

    【解决方案4】:

    Java 中有很多异常,但听起来您可能需要自定义异常,具体取决于您对格式的含义。这个网站上有很多这样的例子。这里只有两个链接。

    How to create a custom exception type in Java?

    How to define custom exception class in Java, the easiest way?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2016-05-30
      • 2016-10-07
      相关资源
      最近更新 更多