关于Integer在map中的编译歧义问题

✅ 正确处理方式(避免歧义)
由于 Integer 是对象类型,如果你想安全地转为字符串,最推荐的写法如下:

export.setTableYear(
Optional.ofNullable(e.getTableYear())
.map(String::valueOf) // ✅ 推荐:避免 Integer::toString 的歧义
.orElse(“”)
);
🔍 为什么不能用 Integer::toString

.map(Integer::toString)
编译器会困惑:
是想调用:

Integer.toString(int) → 静态方法
还是

Integer.toString() → 实例方法?

由于 map() 接收的是函数式接口,Java 无法确定是引用实例方法还是静态方法,所以报错“ambiguous”。

✅ 如果你想更直观:

export.setTableYear(
e.getTableYear() != null ? e.getTableYear().toString() : “”
);
这也完全可以,逻辑清晰简洁。

✅ 小结
写法 推荐度 说明
map(String::valueOf) ⭐⭐⭐⭐✅ 简洁通用、无歧义
map(Integer::toString) ❌ 报错 歧义,编译器不知选哪个
i -> i.toString() ✅ 也可以,但稍冗余
三目运算 ✅ 逻辑直观,不依赖 Optional

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值