我有以下两个简单的代码:
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)
适用于。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句