丢失重要参数/依赖项时抛出什么exception?

采取这种方法

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

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

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

这应该在@throws明确logging,以便用户理解原因。

IllegalStateException如何?

如果不能确保id始终被设置(通过在构造函数中要求它,例如,你可以检查一个有效的id已被传递),那么我认为抛出IllegalStateException的其他build议是正确的。 但如果可能的话,最好先尝试确保你的对象不能进入这个状态

我会使用IllegalStateException,因为id是所有者的状态。 如果id已经作为parameter passing,IllegalArgumentException将是正确的。

而不是抛出一个exception,你应该只是返回一个空的列表。 如果不符合依赖关系/参数,则没有结果。 从发布的评论和代码看来,这是预期的行为。 如果id是空的,那么没有组附加,因此是一个空的列表。

我会通过扩展Exception来创build自己的Exceptiontypes。 通过这种方式调用函数可以捕获特定的exception,并适当地处理它。 注意,你可以对扩展exception做任何事情,但我更喜欢创build自己的exception类,所以我可以在exception处理中非常强大。 当然,这当然取决于你。