通过 Java 中的方法引用调用 toString 8
Invoking toString via method reference in Java 8
我错过了什么?为什么我必须在下面使用 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
这与类型擦除无关。
查看错误信息:
(argument mismatch; invalid method reference
reference to toString is ambiguous
both method toString(int) in Integer and method toString() in Integer match)
Integer
class 有两个 toString
方法匹配 map()
方法期望的功能接口。一个是带有 int
参数的静态方法,另一个是覆盖 Object
的 toString()
.
的 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);
我错过了什么?为什么我必须在下面使用 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
这与类型擦除无关。
查看错误信息:
(argument mismatch; invalid method reference
reference to toString is ambiguous
both method toString(int) in Integer and method toString() in Integer match)
Integer
class 有两个 toString
方法匹配 map()
方法期望的功能接口。一个是带有 int
参数的静态方法,另一个是覆盖 Object
的 toString()
.
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);