这样做
Stream.of(1, 32, 12, 15, 23).map(Integer::toString);
我收到了一个模糊的类型错误。可以理解的是,编译器无法判断我是toString(int)
还是来自toString()
的{{1}}。
当不使用方法引用时,我可能已经通过显式转换或者写出泛型的长手,但是如何让编译器知道我在这里的含义?我可以使用什么语法(如果有的话)来明确?
答案 0 :(得分:33)
无法使方法引用明确无误;简单地说,方法引用是仅支持明确方法引用的功能。所以你有两个解决方案:
使用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
值。
答案 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);