발생된 예외는 호출자가 수행한 작업과 관련되어야 합니다. 이 항목에서는 예외 변환(예외를 포착하고 다른 예외를 발생시키는 것)과 예외 연결(예외의 원인 체인을 보존하기 위해 새 예외에 예외를 래핑하는 것)을 소개합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!