【问题标题】:Throw an exception from an overridden method of a Java class从 Java 类的重写方法中引发异常
【发布时间】:2016-01-18 19:55:19
【问题描述】:

我想扩展 Java 的 HashMap<K, V> 类。我重写了put(...) 方法,并且在某些情况下我想抛出异常。

由于基类的put 方法没有抛出异常,我得到一个编译器错误。

什么是最好的解决方案?

谢谢!

【问题讨论】:

标签: java oop exception polymorphism overriding


【解决方案1】:

您可以在您的子类中创建一个不覆盖put 的方法,但在必要时调用原始put()。这样的方法将被允许抛出您希望的任何异常。

或者您可以抛出 put 已经可能抛出的未经检查的异常之一(UnsupportedOperationExceptionClassCastExceptionNullPointerExceptionIllegalArgumentException)或任何其他未经检查的异常(尽管不太推荐这样做,因为它们不会记录在Map 接口中)。

来自Map::putJavadoc:

投掷:

UnsupportedOperationException - 如果此映射不支持 put 操作
ClassCastException - 如果指定键或值的类阻止它存储在此map
NullPointerException - 如果指定的键或值是 null 并且此映射不允许空键或值
IllegalArgumentException - 如果指定键的某些属性或值阻止它存储在此地图中

【讨论】:

  • 合乎逻辑的选择是将您的异常包装在UnsupportedOperationException 中并抛出它。喜欢throw new UnsupportedOperationException(yourException)
  • 谢谢!这就是我一直在寻找的
【解决方案2】:

您始终可以抛出从RuntimeException 派生的异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2021-12-12
    • 2014-02-15
    相关资源
    最近更新 更多