我有两个简单的代码:
IntFunction<String> f1 = Integer::toString;
Function<Integer, String> f2 = Integer::toString;
我认为这两个定义都是正确的并且等价相同,但第二个定义了编译错误,抱怨Required Function<Integer, String>,but Method Reference is found.
答案 0 :(得分:6)
第二种方法参考不明确:
static
方法
public static String toString(int i)
和实例方法
public String toString()
适用。
如果使用lambda表达式编写第二个赋值,可以看到有两种方法可以使用:
Function<Integer, String> f2 = i -> Integer.toString (i);
或
Function<Integer, String> f2 = i -> i.toString ();
当您指定Integer::toString
时,编译器无法决定您指的是哪种方法。
另一方面,对于IntFunction<String>
,只有public static String toString(int i)
适用。