Java:初始化错误的相应异常

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


答案 1

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

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

如果您由于错误(或荒谬)的值而在工厂中抛出异常,我喜欢抛出类似于“Y不能是A”的描述。IllegalArgumentException

如果您由于缺少值而在工厂中抛出异常,我喜欢抛出类似于“Y不能为空”的描述。IllegalArgumentException

最后一个偏好有待一些争论。有些人建议扔一个;在我的情况下,我们不惜一切代价避免它们,因为许多客户倾向于不阅读异常消息(并假设NullPointerException意味着编码错误)。NullPointerException

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


答案 2

您可以通过扩展 Exception 类来创建自己的 Exception