当静态工厂方法无法初始化新对象时,我应该抛出哪个异常?我更喜欢引发有意义的异常而不是返回 null
。
最佳答案
如果你因为数据不足而在 Factory 中抛出异常,我喜欢抛出一个 IllegalStateException
,其描述类似于“无法构造 X,未设置 Y”。
如果您由于数据冲突而在工厂中抛出异常,我喜欢抛出一个
IllegalStateException
,其描述类似于“无法构造 X,Y 与 Z 冲突”。
如果您由于错误(或无意义的)值而在工厂中引发异常,我喜欢引发 IllegalArgumentException
,其描述类似于“Y 不能是 A”。
如果您由于缺少值而在工厂中抛出异常,我喜欢抛出一个 IllegalArgumentException
,其描述类似于“Y 不能为空”。
最后一个偏好取决于一些争论。有人建议最好抛出 NullPointerException
;就我而言,我们不惜一切代价避免它们,因为许多客户倾向于不阅读异常消息(并假设 NullPointerException 意味着编码错误)。
在任何情况下,您都应该提供一个好的、具体的信息来说明引发异常的原因,以减轻您在几个月后看到该异常引发的 future 支持成本。
关于Java:初始化错误的适当异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9684500/