Java 在API中引发非自定义异常

Java 在API中引发非自定义异常,java,api,exception,Java,Api,Exception,我正在编写一个API,希望抛出一个IOException。我被告知,我们应该始终在API中的自定义异常中包装异常 我正在编写一个API,希望抛出一个IOException 那很好。去做吧 我被告知,我们应该始终在API中的自定义异常中包装异常 如果有人教你这一点,他们完全错了。通常认为,在适用的情况下使用(例如抛出)标准异常是最佳做法 例如: 9) 使用标准例外 我们的第九个Java最佳实践建议使用标准和内置Java异常。在维护和一致性方面,使用标准异常而不是偶尔创建自己的异常要好得多。重用标准

我正在编写一个API,希望抛出一个IOException。我被告知,我们应该始终在API中的自定义异常中包装异常

我正在编写一个API,希望抛出一个IOException

那很好。去做吧

我被告知,我们应该始终在API中的自定义异常中包装异常

如果有人教你这一点,他们完全错了。通常认为,在适用的情况下使用(例如抛出)标准异常是最佳做法

例如:

9) 使用标准例外

我们的第九个Java最佳实践建议使用标准和内置Java异常。在维护和一致性方面,使用标准异常而不是偶尔创建自己的异常要好得多。重用标准异常使代码更具可读性,因为大多数Java开发人员都熟悉JDK中的标准RuntimeException,如IllegalStateException、IllegalArgumentException或NullPointerException,他们将能够立即知道异常的用途,而不是在代码或文档的另一个地方查找用户定义的异常的用途


参考资料:

是的,你的教育是正确的。您的确切问题是什么?如果您实际遇到并希望报告IOException,我看不出有任何理由产生自定义异常。您可以做的是链接您的异常以提供更好的消息:
catch(IOException ioe){throw new IOException(“无法读取设置文件=“+name,ioe”);}
@eckes OP意味着您应该将这个
IOException
包装成一个从
RuntimeException
扩展而来的自定义异常,这样您的API的客户端代码就不会使用try-catch块了。@luigimendoza OP没有提到RuntimeException。此外,只有在某些圈子里,未经检查的异常才被认为是API的好设计。没有这样的规则或最佳实践在API中包装自定义异常。在开发API时,您需要评估什么对API的客户端更有意义,无论是原始异常还是自定义异常。