当一个重要的参数/依赖项丢失时抛出什么异常?

采取这种方法

/**
* @return List of group IDs the person belongs to
*
*/
public List<String> getGroups() {
if (this.getId().equals("")) return null;
}

我想抛出异常而不是返回 null,当一个重要的参数/依赖项没有被设置时抛出什么异常?

58644 次浏览

如果参数/参数是从外部控制的,我会使用 IllegalArgumentException; 如果方法只是在错误的时刻(状态)被调用,则使用 IllegalStateException。在你的特殊情况下,我认为是后者。一个(可疑的)替代品是 NullPointerException

但是,应该在 @throws中明确地记录这一点,以便用户理解其中的原因。

我会使用 IllegalStateException,因为 id 是所有者的状态。如果 id 作为参数传递,则 IllegalArgumentException 将是正确的。

我将通过扩展 Exception 创建自己的 Exception 类型。这样,调用函数可以捕获特定的 Exception 并适当地优雅地处理它。 注意,您可以对几乎所有扩展 Exception 的东西做同样的事情,但是我更喜欢创建自己的 Exception 类,这样我可以在异常处理方面非常健壮。当然,这取决于你。

如果不能确保总是设置 id (例如在构造函数中要求它,在构造函数中可以检查是否传递了有效的 id) ,那么我认为抛出 非法状态异常的其他建议是正确的。但是,如果可能的话,最好首先尝试并确保您的对象不会进入这种状态

应该只返回一个空列表,而不是引发异常。如果不满足依赖项/参数,则不会有结果。从发布的注释和代码来看,这似乎是预期的行为。如果 id 为空,则没有附加组,因此列表为空。