Java:初始化错误的恰当例外

时间:2012-03-13 13:04:29

标签: java exception error-handling initialization

当静态工厂方法无法初始化新对象时,我应该抛出哪个异常?我更喜欢提出一个有意义的例外,而不是返回null

5 个答案:

答案 0 :(得分:38)

如果由于数据不足而在工厂中抛出异常,我想抛出IllegalStateException,其描述类似于“无法构造X,没有设置Y”。

如果由于数据冲突而在工厂中抛出异常,我想扔一个 IllegalStateException的描述类似于“无法构造X,Y与Z冲突”。

如果由于错误(或无意义)值而在工厂中抛出异常,我想抛出一个IllegalArgumentException,其描述类似于“Y不能是A”。

如果由于缺少值而在工厂中抛出异常,我想抛出一个IllegalArgumentException,其描述类似于“Y不能为空”。

最后的偏好取决于一些争论。有些人认为抛出NullPointerException可能会更好;在我的情况下,我们不惜一切代价避免它们,因为许多客户往往不会读取异常消息(并假设NullPointerException意味着编码错误)。

无论如何,您应该提供一个好的,具体的消息,说明为什么会抛出异常,以减轻您在未来几个月内发现异常的未来支持成本。

答案 1 :(得分:2)

您可以通过扩展Exception类

来创建自己的Exception

答案 2 :(得分:2)

这样的事情可能应该只是一个断言,但如果事实上有可能失败,那么对我来说有意义的自定义异常就是我的选择。

答案 3 :(得分:2)

是的,问题的原因是你最好的选择。如果参数不正常,你可以抛出IllegalArgumentException,如果某个文件不存在,你可以抛出FileNotFoundException,如果工厂没有正确初始化,你可以抛出IllegalStateException等等......

但是,创建自己的Exception很容易。只需将您的类声明为extends Exception并添加委托构造函数。如果扩展Exception,则必须使用throws声明可以抛出它的方法。如果你不想这样,可以扩展RuntimeException,不需要声明那些。

答案 4 :(得分:1)

理想情况下,您希望扩展Exception并制作自己的IntializatonException