Ausgelöste Ausnahmen sollten sich auf die vom Aufrufer ausgeführte Aufgabe beziehen. In diesem Element werden die Ausnahmekonvertierung (Abfangen einer Ausnahme und Auslösen einer anderen) und die Ausnahmeverkettung (Einschließen einer Ausnahme in eine neue Ausnahme, um die Kausalkette der Ausnahme aufrechtzuerhalten) eingeführt.
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); } }
Die obige Methode erfasst die JAXBException
和 UnsupportedEncodingException
,并重新抛出一个适合方法抽象级别的新异常。新的 BillingRunFailed
-Ausnahme und umschließt die ursprüngliche Ausnahme. Dies ist also ein gutes Beispiel für die Ausnahmeverkettung. Der Vorteil der Ausnahmeverkettung besteht darin, dass sie Ausnahmen auf niedriger Ebene beibehält, die beim Debuggen von Problemen hilfreich sein können.
Das obige ist der detaillierte Inhalt vonWie Java zur Abstraktion geeignete Ausnahmen auslöst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!