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

时间:2014-02-19 07:28:57

标签: java java-8

这样做

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

我收到了一个模糊的类型错误。可以理解的是,编译器无法判断我是toString(int)还是来自toString()的{​​{1}}。

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

3 个答案:

答案 0 :(得分:33)

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

  1. 使用lambda表达式:

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

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

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

答案 1 :(得分:16)

使用方法参考的主要选项是:

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)

答案 2 :(得分:16)

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

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