首页 > 解决方案 > 了解 Java 8 Lambda 表达式

问题描述

我正在阅读有关 Java 8 的这篇文章,并有以下问题/意见,我将不胜感激一些反馈/回应。

1)@FunctionalInterface以下代码是否需要声明?或者是否可以在没有它的情况下执行相同的代码并且它是出于文档目的?从文章中是否有必要尚不清楚。

@FunctionalInterface
private interface DTOSender {
   void send(String accountId, DTO dto);
}

void sendDTO(BisnessModel object, DTOSender dtoSender) {
   //some logic for sending...
   ...
   dtoSender.send(id, dto);
   ...
}

2) 一般来说,一个函数可以作为参数传递给 Java 8 中的另一个函数吗?我的理解是只有数据类型可以作为参数传递给函数,所以我认为这是不可能的,因为函数不是数据类型。

3)我是否需要做任何特别的事情来完成上面的#2,或者我可以只写我对这两种方法的定义,然后将一种方法作为参数传递给另一种方法?

4) 对象可以作为参数传递给 Java 8 中的另一个函数吗?我是否需要做一些特别的事情来完成这项工作,或者我可以只编写对象和方法的定义,然后将对象作为参数传递给方法?

标签: javalambdajava-8functional-programminghigher-order-functions

解决方案


  1. @Functional Interface只是一个提示,这样您就不会在界面中添加更多方法。

  2. 它可以。许多方法Stream将函数作为参数:Stream.of(1, 2, 3).forEach(System.out::println).

  3. Lambda 是一个函数实例Function<Integer, Integer> f = a -> a + 1. 编辑:您可以使用方法引用按名称传递函数(参见 2.,println是常规方法)。

  4. 我不完全明白这个问题。如果该方法使用任何非原始参数,则它需要一个对象(Java 中除了原始对象之外的所有内容都是一个对象)。


推荐阅读