Tom*_*Tom 5 java java-8 method-reference
我有两个简单的代码:
IntFunction<String> f1 = Integer::toString;
Function<Integer, String> f2 = Integer::toString;
Run Code Online (Sandbox Code Playgroud)
我认为这两个定义都是正确的,并且等价相同,但第二个定义了编译错误,抱怨说 Required Function<Integer, String>,but Method Reference is found.
第二种方法参考是模糊的:
这两种static方法
public static String toString(int i)
Run Code Online (Sandbox Code Playgroud)
和实例方法
public String toString()
Run Code Online (Sandbox Code Playgroud)
适用.
如果使用lambda表达式编写第二个赋值,可以看到有两种方法可以使用:
Function<Integer, String> f2 = i -> Integer.toString (i);
Run Code Online (Sandbox Code Playgroud)
要么
Function<Integer, String> f2 = i -> i.toString ();
Run Code Online (Sandbox Code Playgroud)
分配时Integer::toString,编译器无法决定您指的是哪种方法.
另一方面,在适用的情况下IntFunction<String>,仅public static String toString(int i)适用.
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |