在接口实现中不实现异常抛出,这样可以吗?

3

我为单向链表创建了一个更加具体的ListIterator,并且已经实现了其中大部分方法。在文档描述中,我看到有些方法应该抛出异常,但是一些异常似乎并不特别相关,尤其是因为我正在使用泛型。在实现中没有这些异常是否可以?


1
什么方法?什么异常?为什么不相关? - T.J. Crowder
我在想,如果我使用泛型,ClassCastException和IllegalArgumentException可能与add方法无关。我的想法正确吗? - Luke Davis
2
不行,因为要记住泛型主要是编译时的事情。完全有可能获得对列表的原始引用并将不应该在其中的东西放入其中,因此它们仍然适用。它们也都是RuntimeException,所以你不需要声明它们。 - T.J. Crowder
没问题...我想我会再好好复习一下异常处理。 - Luke Davis
1个回答

4

从根本上说,由于throws不是方法签名的一部分,如果你的方法实现不抛出相关异常,你可以省略该异常。

例如,以下代码是完全有效的:

public interface MyInterface {
    void method() throws Exception;
}

并且

public class Example implements MyInterface {
    public void method() {
    }
}

这是正确的,因为从逻辑角度来看,异常取决于实现而不是接口方法的名称。 - Mohammed Housseyn Taleb
@MohammedHousseynTaleb:是的。 - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接