通过Java 8中的方法引用调用toString

时间:2015-01-11 08:00:47

标签: java java-8 method-reference

我错过了什么?为什么我必须使用下面的Object::toString而不是Integer::toString?它与带有泛型的类型擦除有什么关系吗?

Arrays.asList(1,2,3).stream().map(Integer::toString).forEach(System.out::println); //Won't compile

Arrays.asList(1,2,3).stream().map(Object::toString).forEach(System.out::println); //Compiles and runs fine

1 个答案:

答案 0 :(得分:17)

这与类型擦除无关。

查看错误消息:

(argument mismatch; invalid method reference
  reference to toString is ambiguous
    both method toString(int) in Integer and method toString() in Integer match)

Integer类有两个toString方法,与map()方法所期望的功能接口相匹配。一个是静态的int参数,另一个是toString()方法覆盖Object的{​​{1}}。

编译器不知道您是否要执行此操作:

toString()

或者这个:

Arrays.asList(1,2,3).stream().map(i->Integer.toString(i)).forEach(System.out::println);