Java 为什么此功能接口有效
我发现了一个java谓词函数接口示例:Java 为什么此功能接口有效,java,Java,我发现了一个java谓词函数接口示例: BiPredicate<String, String> b1 = String::startsWith; BiPredicate<String, String> b2 = (string, prefix) -> string.startsWith(prefix); System.out.println(b1.test("chicken", "chick")); S
BiPredicate<String, String> b1 = String::startsWith;
BiPredicate<String, String> b2 =
(string, prefix) -> string.startsWith(prefix);
System.out.println(b1.test("chicken", "chick"));
System.out.println(b2.test("chicken", "chick"));
BiPredicate b1=String::startsWith;
双预测b2=
(字符串,前缀)->string.startsWith(前缀);
系统输出打印(b1.测试(“鸡”、“鸡”));
系统输出打印(b2测试(“鸡”、“鸡”);
我了解b2的工作原理-这很清楚。
编译器如何理解如何使用b1方法?方法boolean startWith(String str)只有一个参数。字符串类没有布尔startWith(stringsrt1,stringsrt2)方法 方法startWith(字符串str)只有一个参数 实际上,
String.startsWith
有一个隐式的this
参数,因为您在对象实例上调用它。因此,它符合具有两个字符串参数的功能接口
正如Giorgi所提到的,您应该参考,因为这种语法还有很多内容,以及:
之前的名称引用对象而不是类名时的工作方式
简而言之,有四个案例。假设方法调用的函数接口具有两个参数a
和b
:
Class::staticMethod
这相当于(a,b)->Class.staticMethod(a,b)
对象::方法
这相当于(a,b)->object.method(a,b)
类::方法
这相当于(a,b)->a.方法(b)
Class::new
这相当于(a,b)->新的类(a,b)
这只是一个快捷方式,(a,b)->a.c()
与classa::c
阅读方法引用是一样的。