2

示例代码:

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 的东西
4

0 回答 0