我发现了一个java谓词函数接口示例:
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"));
我明白b2是如何工作的——很清楚。编译器如何理解如何使用b1方法?方法boolean start To(String str)只有一个参数。String类没有
boolean start To(String srt1, String srt2)方法。
方法startWith(String str)只有一个参数。
实际上String.startswith
有一个隐式的this
参数,因为您在对象实例上调用它。因此,它符合具有两个String
参数的函数接口。
正如Giorgi所提到的,您应该查阅有关方法引用的文档,因为这种语法还有很多内容,以及当前面的名称引用对象而不是类名时它的工作方式。
简而言之,有四种情况。假设具有两个参数a和b的方法调用的功能接口:
>
类::静态方法
这相当于(a, b)-
对象::方法
这相当于
(a, b)-
类::方法
这相当于
(a, b)-
类::新建
这相当于
(a, b)-
问题内容: 我认为这个问题已经存在,但是我找不到。 我不明白,为什么必须要有一个功能接口才能使用lambda。考虑以下示例: 这可以正常工作,但是如果您取消注释行,则不会。为什么?以我的理解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码? 编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是在这里,我得到了一些非常有用的答案,这要
在Java8中,新的包是Java。util。函数包含很多函数接口。该软件包的文档(http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)多次提到“函数形状”: 有几种基本函数形状,包括函数(从T到R的一元函数)、消费者(从T到void的一元函数)、谓词(从T到布尔的一元函数)和供应者(从T到
我只想问关于争论的事。方法名并不重要,但每个方法都采用不同参数的唯一顺序,因此Oracle可以实现这个特性,而不是让每个“lambda-interface”都有一个方法。
我正在学习这个函数接口科目,我研究如何使用预定义的函数接口:谓词和函数。 所以我创建了几个实现: 这与简单地调用一个常规函数来完成这些任务有何不同? 是为了让lambdas使用它们吗?是否允许将它们作为方法参数传递? 我真的错过了这个技术的真正道理。
问题内容: 我不明白为什么Python没有功能。它有一个内置的(我认为是姐姐),但没有。 在python 2.6中甚至有一个函数(在math中),但是没有符号。当您可以只写一个然后直接从中获取时,为什么还要写一个?后者会更清楚:x带有y的符号,而带copysign的则必须记住它是x带有y的符号还是y带有x的符号! 显然,除了,它不提供任何其他功能,但是它也将更具可读性(对于像python这样的高度
根据Java语言规范(8.0版),“接口不继承自对象,而是隐式声明许多与对象相同的方法。”如果您在接口中提供来自Object类的抽象方法,它仍然是一个函数接口。 编译器给出错误:“EqualsInterface不是函数接口:在接口EqualsInterface中找不到抽象方法”。为什么?提前感谢