如何在方法内更改传递的Lambda表达式的值

时间:2017-08-21 12:01:29

标签: java lambda java-8 stream functional-interface

我有一个类EmailServiceImpl,其方法为sendMail(Cumsumer<EmailTemplate> template)

EmailTemplate有4个文件

  • 受试者

我正在使用Lambda表达式设置EmailTemplate的三个字段并将其发送到sendMail方法,如下所示:

emailService.sendMail(mailer->
                mailer
                    .to("")
                    .subject("")
                    .body("")
                );

但我想在sendMail方法中添加第4个(来自),如下所示:

public String sendMail(Consumer<EmailTemplate> template) {
        template.from = "XYZ"; // cannot do this

    } 

我无法使用此lambda(模板)访问EmailTemplate的任何字段。

我有以下问题:

  1. 是否可以在方法中更改传递的lambda的值(如上所述)?
  2. 这样做是个好主意吗?
  3. 使用lambda做任何更好的方法吗?

1 个答案:

答案 0 :(得分:4)

  

是否可以在方法中更改传递的lambda的值(如   以上)?

没有。 sendMail()方法接受emailTemplate的使用者。哪个不是emailTemplate本身。使用者是一个接受emailTemplate并对其执行某些操作的函数。如果要设置第四个字段,则需要在lambda内部执行此操作。 sendEmail()方法实际上是接收一个可以处理emailTemplate的类。它根本没有收到emailTemplate实例/状态。

  

这样做是不是好主意?

这取决于您希望如何设计sendMail()方法以及您希望它具有哪些责任。通过它的外观(并保持简单),sendEmail()方法应该接收emailTemplate对象(而不是消费者)。如果您只收到消费者,那么您唯一能做的就是在emailTemplate对象上调用/应用它(您当前没有发送到sendEmail()方法)

  

使用lambda做任何更好的方法吗?

Lambdas定义行为/方法体。对稍后提供给他们的对象的行为。在这个例子中,我认为不需要lambdas