你会扔一个IllegalStateExceptionif:
final只在构造函数中分配?教科书示例:您的类是不可变的Collection<BigInteger>,您的方法应该返回最大元素,但此实例为空.
我已经阅读了关于这个主题的Kevin Bourillon博客文章,我不确定适用哪条规则.
UnsupportedOperationException - 这意味着无论实例的构造方式如何,对于此类的实例(具体类型),调用的方法始终会失败.
当然不.此类的许多实例都不为空,操作也会成功.
IllegalStateException - ...确实存在至少一个有问题的实例可能已进入的备用状态,它将通过检查... <snip> ...另请注意,此异常是否合适,无论它是否合适实际上可能会改变实例状态的这个方面,或者已经太晚了.
不完全的.这个实例是用零长度构造的,所以这个实例不是,也永远不会是非空的.
IllegalArgumentException - 抛出此异常意味着此参数至少存在一个其他值,该值将导致问题检查通过.
如果有问题的参数是隐式this参数,则可以应用.这是我很想抛出的例外,但我担心它可能会令人困惑.
更新:将示例更改为Collection<Integer>,Collection<BigInteger>因为存在标识元素(Integer.MIN_VALUE)的事实会分散问题.
Jon*_*Jon 11
它听起来不像上面提到的任何常见异常类适合Textbook示例.
你应该抛出一个NoSuchElementException正如该Collections.max()方法所做的那样.
我认为IllegalStateException放在这里是合适的。如果实例构造正确的话,它可能处于正确的状态(即“已经太晚了”部分)。