如何在没有lambda表达式

时间:2016-04-07 12:33:55

标签: java json lambda

大家好我想知道如何在不使用lambda表达式的情况下使用JSONObject.computeIfAbsent。 实际上,这是我的代码

list.computeIfAbsent(id, k -> {
            try {
                throw new UnknowClientException("Unkown client : Unable to find client with id" + id);
            } catch (UnknowClientException e) {

            }
        });

我希望该函数抛出我的自定义异常。我假设我需要添加函数的签名,我不知道如何使用lambda表达式,这就是为什么我要使用“函数”

1 个答案:

答案 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是一个已检查的异常,则调用者必须捕获或声明它,这似乎是你的初衷。