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