Java 这种情况下的异常处理模式?

Java 这种情况下的异常处理模式?,java,exception,Java,Exception,我有两个来自两个不同公司的API,它们允许我与他们的服务器通信以处理事务。我的任务是为这些API创建一个通用接口。我想出了这样的办法: IServiceProvider <- ServiceProvider <- CompanyAServiceProvider IServiceProvider <- ServiceProvider <- CompanyBServiceProvider 或者我可以向调用方抛出此异常: public String purchase(Stri

我有两个来自两个不同公司的API,它们允许我与他们的服务器通信以处理事务。我的任务是为这些API创建一个通用接口。我想出了这样的办法:

IServiceProvider <- ServiceProvider <- CompanyAServiceProvider
IServiceProvider <- ServiceProvider <- CompanyBServiceProvider
或者我可以向调用方抛出此异常:

public String purchase(String amount) throws Exception {
  request = new Request( RequestIF.NEW_ORDER_TRANSACTION );
}
并且让调用方只处理
异常
,不管该异常是什么,也不管API抛出它


当我处理两组不同的抛出异常时,如何为两个不同的API编写接口并使其保持通用性。我处理得对吗?最好的选择是什么?

在本例中,我创建了自己的异常子类,只包装实际的异常。然后,我的API只公开我的异常。

想想在调用函数的级别上处理的抽象级别。想必你不想透露你正在与之打交道的个别公司的细节,而更愿意处理更一般的概念,如订单、采购交易等。
因此,前一张海报的建议很好:创建一个类似PurchaseException的类,它是从供应商的各个异常类返回的信息的包装器。

本地处理
异常的另一个原因,并将自己的异常滚到下游(必要时):


当引发不同供应商的特定类型的
异常时,可能需要执行一些工作(清理、重试等)

是的,创建您自己的异常子类。确保您支持将异常作为参数的异常构造函数。您的API可以创建名为的异常,以使此API的用户有意义,并且您可以适当地包装来自您正在使用的第三方API的异常。这是最佳实践。如果在购买方法中,可以从A公司的API引发多个不同的异常,该怎么办?我是否用我创建的不同异常类包装每个异常类?如果您希望传递原始异常的语义,您可以基于原始自定义异常创建多个异常类:MyException、Failure1Exception扩展MyException等。然后您可以在方法上声明MyException或列出它Failure1Exception,故障2异常等。
public String purchase(String amount) throws Exception {
  request = new Request( RequestIF.NEW_ORDER_TRANSACTION );
}