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

How to change value of passed Lambda expression inside method

我有一个 class 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 执行此操作有更好的方法吗?

Is it possible to change values of passed lambda inside a method(like above)?

没有。 sendMail() 方法接受 emailTemplate 的消费者。这不是 emailTemplate 本身。消费者是一个函数,它接受一个 emailTemplate 并用它做一些事情。如果要设置第四个字段,则需要在 lambda 内部进行。 sendEmail() 方法本质上是接收一个可以处理 emailTemplate 的 class。它根本没有收到电子邮件模板 instance/state。

Is it good idea to do like that?

这取决于您希望如何设计 sendMail() 方法以及您希望它承担什么责任。从它的外观(并保持简单)来看,sendEmail() 方法应该接收一个 emailTemplate 对象(而不是消费者)。如果您只收到消费者,那么您唯一能做的就是 invoke/apply 它在 emailTemplate 对象上(您目前没有发送到 sendEmail() 方法)

Any better approach to do this using lambda?

Lambda 定义 behavior/method-bodies。对稍后提供给他们的对象执行操作。在此示例中,我根本看不到对 lambda 的需求