gpt4 book ai didi

java - IllegalStateException 适用于不可变对象(immutable对象)吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:01 25 4
gpt4 key购买 nike

你会扔一个IllegalStateException吗?如果:

  1. 由于一个或多个字段的值,方法无法完成其工作
  2. 这些字段是 final并且只在构造函数中赋值?

教科书示例:您的类是不可变的 Collection<BigInteger>并且您的方法应该返回最大元素,但此实例为空。

我已阅读 Kevin Bourillon`s blog post关于这个主题,我不确定适用哪条规则。

UnsupportedOperationException - this means that the method invoked will always fail for an instance of this class (concrete type), regardless of how the instance was constructed.

绝对不是。此类的许多实例不为空,操作会成功。

IllegalStateException - ... there does exist at least one alternate state that the instance in question could have been in, which would have passed the check ... <snip> ... Note also that this exception is appropriate whether or not it is possible to actually mutate this aspect of the instance's state, or it's already too late.

不完全是。这个实例是用零长度构造的,所以这个实例不是也永远不可能是非空的。

IllegalArgumentException - throwing this exception implies that there exists at least one other value for this parameter that would have caused the check in question to pass.

如果所讨论的参数是隐式的 this 则可能适用范围。这是我想抛出的异常,但我担心它可能会造成混淆。


更新:更改了 Collection<Integer> 中的示例至 Collection<BigInteger>因为存在身份元素 (Integer.MIN_VALUE) 的事实分散了问题的注意力。

最佳答案

听起来您上面提到的任何常见异常类都不适合教科书示例。

你应该抛出一个 NoSuchElementException因为这正是 Collections.max() 的内容方法确实如此。

关于java - IllegalStateException 适用于不可变对象(immutable对象)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com