我有一个方法只能接受某种格式的字符串。当格式无效时,我想抛出异常。我是Java的新手,所以我不确定这里使用的正确类型是什么。我发现有一个IllegalFormatException,它基于名称听起来正确,但the docs让我对此不太了解。在这里使用的正确Exception类是什么?
有问题的方法是PropertyId类的构造函数,它接受一个字符串参数,该参数应匹配'/ ^ p [1-9] [0-9] * $ / i'。它应该与this equivalent in Python基本相同。
我更喜欢使用标准库提供的异常,除非确实没有合适的异常,或者在我的情况下通常会同意,应该创建一个新的异常衍生。
答案 0 :(得分:3)
对于我来说,这对我来说是合理的,来自Javadoc for IllegalFormatException
格式字符串包含非法时抛出未经检查的异常 语法或与给定不兼容的格式说明符 参数。只有这个异常的显式子类型对应 应该实例化特定的错误。
正如@BasvandenBroek指出的那样,这适用于包含格式信息的String,而不是检查String的格式。
但是,它的父级IllegalArgumentException可能是最好的。 NumberFormatException接近但不合适,它的父也是IAE。
注意:您可以创建自己的IllegalArgumentException子类
public class StringValidationFailedException extends IllegalArgumentException {
public StringValidationFailedException(String message) {
super(message);
}
}
答案 1 :(得分:3)
我和@TwoThe在一起。 IllegalArgumentException是要走的路。事实上,我实际上并不认为应该有太多争论。这种情况正是IllegalArgumentException的作用。
IllegalFormatException肯定会产生误导,但是(及其子类)用于完全不同的情况 - 当您为output提供的格式字符串无效时。
只应非常小心地生成自己的自定义异常。只有当您遇到没有标准例外的特殊情况时。这不是真的,除非绝对必要,否则你不希望你的客户必须处理非标准的东西。
请记住,强大的力量会带来很大的责任。
答案 2 :(得分:2)
答案 3 :(得分:1)
Java中有许多例外,但听起来您可能需要一个自定义异常,具体取决于格式的含义。这个网站上有很多例子。这里只有两个链接。
How to create a custom exception type in Java?
How to define custom exception class in Java, the easiest way?