猿问

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

这样做时


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

我收到一个模棱两可的类型错误。可以理解的是,编译器无法确定我是指toString(int)还是toString()from Integer。


当不使用方法引用时,我可能通过显式转换摆脱了困境,或者长时间写了泛型,但是如何让编译器知道我的意思呢?我可以使用什么语法(如果有)来明确表达?


繁花不似锦
浏览 362回答 3
3回答

Helenr

没有方法可以使方法引用明确。简而言之,方法引用是仅明确的方法引用才支持的功能。因此,您有两种解决方案:使用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值。

胡说叔叔

由于Integer.toString()overrides Object.toString(),在这种特殊情况下,您可以按以下方式对其进行修复:Stream.of(1, 32, 12, 15, 23).map(Object::toString);

梦里花落0921

使用方法引用的主要选项是: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)。
随时随地看视频慕课网APP

相关分类

Java
我要回答