示例代码:
public void convertAndThrow(BusinessException e) throws ApiException {
if (e.getKey().equals("0x42")) {
throw new ApiConflict(e, 110);
}
throw new ApiInternalError(e, 0);
}
有BusinessException
一个键(基本上是来自另一个组件的数字返回码,在我们这边显示为字符串)。现在BusinessException
需要将任意实例转换为(其余)ApiExceptions。上面的示例将导致“0x42”出现 409“冲突”,否则会导致 500“内部错误”。
注意:构造函数采用相同数量的参数(具有相同的含义、底层异常和一些“子”返回代码)。
现在我想要一张地图,让我可以得到一些东西,然后我可以用它来创建所需的 ApiException 实例。以下不起作用,因为Supplier.get()
不带任何参数,它只是为了概述我想要的:
Map<String, Supplier<ApiException>> exceptionsByKey = new HashMap<>();
exceptionsByKey.put("0x42", somethingTakingAnExceptionCreatingApiConflict(110));
这样我以后就可以简单地做:
throw exceptionsByKey.get(key).get(e);
换句话说:
- 我想将我的不同案例放入地图中
- 地图键:“返回码”
- 映射值:构建我特定 ApiExceptions 的东西