IntFunction <string>和Function <integer,string =“”>

时间:2017-10-24 07:24:12

标签: java java-8 method-reference

我有两个简单的代码:

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

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

1 个答案:

答案 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)适用。