一尘不染

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

java

这样做时

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

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

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


阅读 246

收藏
2020-03-23

共1个答案

一尘不染

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

  1. 使用lambda表达式:
Stream.of(1, 32, 12, 15, 23).map(i->Integer.toString(i));
  1. (至少在我看来更是如此)int当源int仅由原始值组成时,请使用原始值流:
IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);

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

2020-03-23