拋出的例外應該與呼叫者執行的任務有連結。此項介紹異常轉換(捕獲異常並拋出另一個)和異常鏈(將異常包裝在新的異常中以保留異常的因果鏈)。
private void serializeBillingDetails(BillingResult billingResult, BillingDetailsType billingDetails) { try { final JAXBContext context = JAXBContext .newInstance(BillingdataType.class); final ByteArrayOutputStream out = new ByteArrayOutputStream(); final Marshaller marshaller = context.createMarshaller(); marshaller.setProperty("jaxb.formatted.output", Boolean.FALSE); final BillingdataType billingdataType = new BillingdataType(); billingdataType.getBillingDetails().add(billingDetails); marshaller.marshal(factory.createBillingdata(billingdataType), out); final String xml = new String(out.toByteArray(), "UTF-8"); billingResult.setResultXML(xml.substring( xml.indexOf("<Billingdata>") + 13, xml.indexOf("</Billingdata>")).trim()); billingResult.setGrossAmount(billingDetails.getOverallCosts() .getGrossAmount()); billingResult.setNetAmount(billingDetails.getOverallCosts() .getNetAmount()); } catch (JAXBException | UnsupportedEncodingException ex) { throw new BillingRunFailed(ex); } }
上述方法捕獲 JAXBException
和 UnsupportedEncodingException
,並重新拋出一個適合方法抽象層級的新例外。新的 BillingRunFailed
異常包裝了原始異常。所以這是異常鏈的一個很好的例子。異常鏈的好處是保留有助於調試問題的低階異常。
以上是java如何拋出適合抽象的異常的詳細內容。更多資訊請關注PHP中文網其他相關文章!