快速业务通道

技巧:当不能抛出异常时 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
re(File f1, File f2) throws IOException {      for (int i = 0; i < 3; i++) {        try {          return f1.getCanonicalPath().compareTo(f2.getCanonicalPath());        }        catch (IOException ex) {          continue;        }      }      // last chance       return f1.getCanonicalPath().compareTo(f2.getCanonicalPath());    } }

这种技巧不能解决常规的 Comparator 的问题,因为必须重试无数次才能避免抛出异常,而且很多 I/O 问题并不是暂时性的。

checked 异常是坏主意吗?

如果 java.io.IOException 是运行时异常,而不是 checked 异常,问题是不是有所改观?答案是否定的。如果 IOException 扩展 RuntimeException 而不是 java.lang.Exception,那么更容易编写出有 bug 的、不正确的代码,这种代码忽略了真正可能发生的 I/O 错误,而在运行时出人意料地失败。

然而,编写正确的、有准备并且能够处理 I/O 错误的代码并不会更容易。是的,相对于不会出现意外 I/O 错误,不需要为此做准备的情况,这种方法更加复杂。但是,从 Java 语言中消除 checked 异常无助于我们实现那样的理想情况。I/O 错误和其他环境问题是常态,积极准备比视而不见要好得多。

总之,checked 异常作为方法签名的一部分并非没有道理。当您发现自己想要从一个方法抛出一个 checked 异常,而这又是不允许的 — 因而抑制本不该抑制的异常 — 那么回过头来,重新组织一下,考虑为什么一开始要覆盖那个方法。很可能,您本应该采取完全不同的方式。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号