Dav*_*tti 5 java api exception
我想知道在这种情况下使用IllegalStateException是否是API的一个很好的设计选择.
场景: 我有一个函数,它检查XML文档是否格式良好,并带有以下签名:
public boolean isXMLDocumentWellFormed(InputStream inXMLDocument)
Run Code Online (Sandbox Code Playgroud)
此函数使用以下代码段加载XML文档:
boolean isXMLDocWellFormed = false;
// Setup document builder
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
if (docBuilderFactory == null)
throw new IllegalStateException(
"The DocumentBuilderFactory cannot be instanciated");
try {
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
// Parse document
Document doc = docBuilder.parse(inXMLDocument);
if (doc != null)
isXMLDocWellFormed = true;
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new IllegalStateException(e);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new IllegalStateException(e);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new IllegalStateException(e);
}
return isXMLDocWellFormed;
Run Code Online (Sandbox Code Playgroud)
API的设计非常易于使用.不过,我想提供API用户知道为什么XML文档不能被选中的可能性(例如:的DocumentBuilderFactory无法创建的DocumentBuilder对象)而不万吨的checked exception的压倒他们,他们将不得不面对.
我对这个设计的担忧是:
a)使用一个单独的Exception类型(即IllegalStateException)来返回每个可能捕获的异常,以指示无法执行检查是个好主意吗?我会说是的,因为用户除了这个功能之外还有两件事:
b)如果 a)的答案为否,那么最合适的例外名称或解决方案是什么?为什么?
问候,
如果您开发的是一个 API,那么您应该将所有异常包装在一个主异常中。这样你就不会泄露实现细节。然而,您的个人品味可能会有所不同
但是我认为 IllegalStateException 不太适合这里。它非常通用并且不能解释问题(IO 异常是非法状态?)。最好的解决方案是创建您自己的自定义异常类并抛出它。
作为您或其他任何人的辅助节点,如果您抛出异常,请不要打印异常。
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |