1

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

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

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

4

4 回答 4

3

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

当格式字符串包含非法语法或与给定参数不兼容的格式说明符时引发未经检查的异常。仅应实例化与特定错误相对应的此异常的显式子类型。

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

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

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

public class StringValidationFailedException extends IllegalArgumentException {
     public StringValidationFailedException(String message) {
          super(message);
     }
}
于 2013-10-05T19:04:21.083 回答
3

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

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

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

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

于 2013-10-05T19:58:41.160 回答
2

尝试IllegalArgumentException

于 2013-10-05T19:09:38.303 回答
1

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

如何在 Java 中创建自定义异常类型?

如何在 Java 中定义自定义异常类,最简单的方法?

于 2013-10-05T19:07:16.957 回答