IntFunction<String> 和 Function<Integer, String>

IntFunction<String> and Function<Integer, String>

我有以下两个简单的代码:

IntFunction<String> f1 = Integer::toString;
Function<Integer, String> f2 = Integer::toString;

我认为这两个定义都是正确的并且等价于同一件事,但是第二个有编译错误,抱怨Required Function<Integer, String>,but Method Reference is found.

第二种方法引用不明确:

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)是适用的。