大家好我想知道如何在不使用lambda表达式的情况下使用JSONObject.computeIfAbsent。 实际上,这是我的代码
list.computeIfAbsent(id, k -> {
try {
throw new UnknowClientException("Unkown client : Unable to find client with id" + id);
} catch (UnknowClientException e) {
}
});
我希望该函数抛出我的自定义异常。我假设我需要添加函数的签名,我不知道如何使用lambda表达式,这就是为什么我要使用“函数”
答案 0 :(得分:1)
将lambda表达式转换为普通类是没有意义的,因为它不会更改允许的异常集。它是已实现的interface
,其声明决定了允许的异常。接口的实现者不能将已检查的异常添加到throws
子句中,这些异常未被已声明的接口覆盖。
如果您正在谈论computeIfAbsent
method inherited from the Map
interface,要实施的方法是Function.apply
,它不允许任何已检查的例外。
作为替代方案,您可以使用
result = Optional.ofNullable(list.get(id)).orElseThrow(() ->
new UnknowClientException("Unkown client : Unable to find client with id" + id));
泛型方法Optional.orElseThrow
声明抛出提供的Supplier
声明要创建的内容,因此如果UnknowClientException
是一个已检查的异常,则调用者必须捕获或声明它,这似乎是你的初衷。