![]() |
1
6
在我看来,这似乎是一个很常见的问题,尽管答案很简单。
正如您所注意到的,您的示例显示了使用功能接口的一种糟糕方法。设计这些类型只是为了结束调用
以下是我如何向自己解释(用非常基本的术语): 1-将功能接口视为“命名逻辑” (合同另一方执行)
是的,功能接口是
类型
,但更合理的做法是看一个名为
逻辑
. 不像普通类型
2-将实现功能接口的代码与使用它的代码隔离开来 在同一组件中使用这两个组件的问题在代码中很明显。您不会编写一个函数接口,声明一个接受一个函数接口的方法,所有这些都只是为了实现它并将其传递给您自己的方法。如果您这样做并且只这样做,那么您使用抽象是出于错误的原因,更不用说正确地使用功能接口了。
有很多正确使用功能接口的例子。我会挑选
这和你的设计有什么不同?
有鉴于此,有许多原因支持/反对函数式编程,上面的重点是根据您的示例使用(或不使用)函数式接口的原因(特别是从编写合同的开发人员的角度)。 |
![]() |
2
3
您混合了两个术语:功能接口和功能编程。
功能接口在Java中作为一种类型化语言引入,以便实现功能性编程。没有好的方法来声明匿名方法(您必须使用匿名类)。而且每个匿名类都定义了一个新的类,当你使用其中的许多类时,它会导致类污染。)然而,匿名方法是函数编程的一个非常重要的元素。因此,如果你考虑函数接口的力量,你应该考虑Java的流API。它使您能够用一种声明性的风格来表示代码,在这种风格中,您可以定义您想要什么,而不是如何获得它。
如果你只想替换
现在您已经通过接口参数化了筛选条件。
这个表达式没有说明如何过滤。它只说你想要一种恐龙,然后把它们打印到控制台上。表达式是使用循环还是使用递归是完全隐藏的。
你可以通过以下方式称之为恐龙
看起来很难看。 因此,与流API结合使用的功能接口使您能够以更舒适的方式(如果您习惯的话)将其写得更短。 |