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)
是适用的。
我有以下两个简单的代码:
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)
是适用的。