You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决getOrDefault传抛异常lambda的函数式接口类型报错

错误原因

Map.getOrDefault 方法的签名为 V getOrDefault(Object key, V defaultValue),第二个参数要求传入和Map存储值类型一致的普通对象,不接收函数式接口类型的参数。你传入的lambda表达式没有匹配的函数式接口目标类型,因此编译器抛出对应错误。
另外这个方法本身也不适合你的需求:就算你强行把lambda执行后的结果传入,不管目标key是否存在,默认值逻辑都会在调用getOrDefault前先执行,会出现不管key存不存在都直接抛异常的问题。
你代码里异常信息的unkonwn是拼写错误,正确拼写为unknown,可以一并修正。

正确实现方式

你可以选两种常用写法实现需求:

  • 写法1:先判空再赋值,逻辑直观无额外依赖
String fileType = uploadCertificateSchoolRequest.getTypeFile();
String mimeCode = CertificationsConstants.FILE_TYPES.get(fileType);
if (mimeCode == null) {
    throw new IllegalStateException("unknown filetype");
}
cliente.setMIMECode(mimeCode);
  • 写法2:链式调用写法,借助Optional实现key不存在时才触发抛异常的逻辑
cliente.setMIMECode(
    Optional.ofNullable(CertificationsConstants.FILE_TYPES.get(uploadCertificateSchoolRequest.getTypeFile()))
        .orElseThrow(() -> new IllegalStateException("unknown filetype"))
);

内容的提问来源于stack exchange,提问作者BugsOverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 00:21:40