✅ 正确处理方式(避免歧义)
由于 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
171万+

被折叠的 条评论
为什么被折叠?



