スローされる例外は、呼び出し元によって実行されるタスクに関連している必要があります。この項目では、例外変換 (例外をキャッチして別の例外をスローする) と例外連鎖 (例外を新しい例外にラップして例外の因果関係の連鎖を保持する) を紹介します。
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 中国語 Web サイトの他の関連記事を参照してください。