依靠超类抛出异常

时间:2014-02-21 22:56:24

标签: java inheritance

我在java中扩展列表,但我不确定如何处理异常。

class InfiniteList extends ArrayList<Integer> {

    InfiniteList(int size) {
        super(size);
     //   if (size < 0) throw new IllegalArgumentException("The size should not be less than zero.");
        add(size);
    }

在这里,我知道截至目前,如果size为负,则ArrayList构造函数会抛出异常。 我的子类实现需要完全相同的行为。 到目前为止世界是好的。

现在稍后有人来并更改ArrayList以接受负值,我的InfiniteList失败。 所以我的解决方案是在InfiniteList中添加/复制异常处理逻辑。然而,这伴随着代码重复的问题。所以我有两个选择。

  1. 相信超级班吗?

  2. 重复代码?

  3. 这里有什么共同/最佳实践等,因为Composition不是一个选项。

1 个答案:

答案 0 :(得分:2)

如果你真的不能写,我不知道为什么你不能,我说信任超级班。特别是考虑到这是一个Java API类。

  • 所有有经验的开发人员都知道
  • 合同极不可能改变

重复代码几乎总是IMO最糟糕的选择。在类似的情况下,我可以看到争论它的唯一原因是,如果你正在扩展一个实施不好的类的类,你试图向外界隐藏它的问题,或者如果它抛出了你真正不喜欢的异常我想加入。