如何在方法引用(toString of Integer)上修复歧义类型?

Tob*_*oby 33 java java-8

这样做的时候

Stream.of(1, 32, 12, 15, 23).map(Integer::toString);
Run Code Online (Sandbox Code Playgroud)

我得到一个模糊的类型错误.可以理解的是,编译器无法分辨我的意思toString(int)toString()来自Integer.

当不使用方法引用时,我可能已经通过显式转换或者写出泛型的长手程来解决这个问题,但是如何让编译器知道我的意思呢?我可以使用什么语法(如果有的话)来明确?

Hol*_*ger 38

没有办法使方法参考明确无误; 简单地说,方法引用是仅支持明确方法引用的功能.所以你有两个解决方案:

  1. 使用lambda表达式:

    Stream.of(1, 32, 12, 15, 23).map(i->Integer.toString(i));
    
    Run Code Online (Sandbox Code Playgroud)
  2. (首选,至少是我)int当源int只包含原始值时,使用原始值流:

    IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);
    
    Run Code Online (Sandbox Code Playgroud)

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


Sla*_*aSt 17

由于Integer.toString()覆盖Object.toString(),在这种特殊情况下,您可以按如下方式修复它:

Stream.of(1, 32, 12, 15, 23).map(Object::toString);
Run Code Online (Sandbox Code Playgroud)


ass*_*ias 16

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

Stream.of(1, 32, 12, 15, 23).map(String::valueOf);
IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);
Run Code Online (Sandbox Code Playgroud)

您当前的版本可能意味着i -> i.toString()i -> Integer.toString(i).