《Effective Java》一书的大部分内容都是聚焦构建一个干净、易懂的 API 以及它如何成为一个伟大库的基础。类的 API 的一部分是任何异常,它可能会抛出已检查(它成为签名的一部分)或未检查的堆栈。作为代码的编写者,我们有责任确保此 API 不会出现任何意外或令人震惊的情况。发生这种情况的一种方式是暴露一个对我们正在编写的类没有意义的异常。 不匹配异常的一个潜在示例是,如果您请求将两个数字相加时,方法抛出一个IOException. 通过抛出这个低级异常,你将实现细节暴露给调用者,实现细节在未来可能会改变,但现在它是你的 API 的一部分,因此很难改变。那么有什么方法可以解决这个问题呢? 用于解决此问题的主要方法是执行所谓的异常转换。异常转换是当您捕获较低级别的异常并将其包装在与您正在处理的抽象相匹配的较高级别的异常中时。
public E get(int index) { ListIterator<E> = listIterator(index); try { return i.next(); } catch (NoSuchElementException e) { throw new IndexOutOfBoundsException("Index: " + index); } } |
NoSuchElementException |