【发布时间】:2016-01-18 19:55:19
【问题描述】:
我想扩展 Java 的 HashMap<K, V> 类。我重写了put(...) 方法,并且在某些情况下我想抛出异常。
由于基类的put 方法没有抛出异常,我得到一个编译器错误。
什么是最好的解决方案?
谢谢!
【问题讨论】:
标签: java oop exception polymorphism overriding
我想扩展 Java 的 HashMap<K, V> 类。我重写了put(...) 方法,并且在某些情况下我想抛出异常。
由于基类的put 方法没有抛出异常,我得到一个编译器错误。
什么是最好的解决方案?
谢谢!
【问题讨论】:
标签: java oop exception polymorphism overriding
您可以在您的子类中创建一个不覆盖put 的方法,但在必要时调用原始put()。这样的方法将被允许抛出您希望的任何异常。
或者您可以抛出 put 已经可能抛出的未经检查的异常之一(UnsupportedOperationException、ClassCastException、NullPointerException、IllegalArgumentException)或任何其他未经检查的异常(尽管不太推荐这样做,因为它们不会记录在Map 接口中)。
来自Map::putJavadoc:
投掷:
UnsupportedOperationException - 如果此映射不支持 put 操作
ClassCastException - 如果指定键或值的类阻止它存储在此map
NullPointerException - 如果指定的键或值是 null 并且此映射不允许空键或值
IllegalArgumentException - 如果指定键的某些属性或值阻止它存储在此地图中
【讨论】:
UnsupportedOperationException 中并抛出它。喜欢throw new UnsupportedOperationException(yourException)
您始终可以抛出从RuntimeException 派生的异常。
【讨论】: