通过Java 8中的方法参考调用toString
我想念什么?为什么我必须在Object::toString
下面使用而不是Integer::toString
?它与泛型类型擦除有关系吗?
Arrays.asList(1,2,3).stream().map(Integer::toString).forEach(System.out::println); //Won't compileArrays.asList(1,2,3).stream().map(Object::toString).forEach(System.out::println); //Compiles and runs fine
回答:
这与类型擦除无关。
查看错误消息:
(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
的toString()
。
编译器不知道您是否要执行此操作:
Arrays.asList(1,2,3).stream().map(i->Integer.toString(i)).forEach(System.out::println);
或这个 :
Arrays.asList(1,2,3).stream().map(i->i.toString()).forEach(System.out::println);
以上是 通过Java 8中的方法参考调用toString 的全部内容, 来源链接: utcz.com/qa/405480.html