为了账号安全,请及时绑定邮箱和手机立即绑定

如何在方法引用(整数的toString)上修复歧义类型?

如何在方法引用(整数的toString)上修复歧义类型?

繁花不似锦 2019-11-04 14:32:44
这样做时Stream.of(1, 32, 12, 15, 23).map(Integer::toString);我收到一个模棱两可的类型错误。可以理解的是,编译器无法确定我是指toString(int)还是toString()from Integer。当不使用方法引用时,我可能通过显式转换摆脱了困境,或者长时间写了泛型,但是如何让编译器知道我的意思呢?我可以使用什么语法(如果有)来明确表达?
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

没有方法可以使方法引用明确。简而言之,方法引用是仅明确的方法引用才支持的功能。因此,您有两种解决方案:


使用lambda表达式:


Stream.of(1, 32, 12, 15, 23).map(i->Integer.toString(i));

(至少在我看来更是如此)int当源int仅由原始值组成时,请使用原始值流:


IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);

这将使用静态Integer.toString(int)方法来使用int值。


查看完整回答
反对 回复 2019-11-04
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

由于Integer.toString()overrides Object.toString(),在这种特殊情况下,您可以按以下方式对其进行修复:


Stream.of(1, 32, 12, 15, 23).map(Object::toString);


查看完整回答
反对 回复 2019-11-04
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

使用方法引用的主要选项是:


Stream.of(1, 32, 12, 15, 23).map(String::valueOf);

IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);

您当前的版本可能是i -> i.toString()或i -> Integer.toString(i)。


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 361 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信