Pengecualian yang dilemparkan hendaklah berkaitan dengan tugas yang dilakukan oleh pemanggil. Item ini memperkenalkan penukaran pengecualian (menangkap pengecualian dan melontar satu lagi) dan rantaian pengecualian (membungkus pengecualian dalam pengecualian baharu untuk mengekalkan rantai sebab pengecualian).
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); } }
Kaedah di atas menangkap JAXBException
dan UnsupportedEncodingException
dan melemparkan semula pengecualian baharu yang sesuai dengan tahap abstraksi kaedah. Pengecualian BillingRunFailed
baharu membungkus pengecualian asal. Jadi ini adalah contoh yang baik bagi rantaian pengecualian. Faedah rantaian pengecualian ialah ia mengekalkan pengecualian peringkat rendah yang boleh membantu dalam masalah penyahpepijatan.
Atas ialah kandungan terperinci Bagaimana java membuang pengecualian yang sesuai untuk abstraksi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!