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

标签 java lambda java-8 stream functional-interface

我有一个类EmailServiceImpl它有一个方法 sendMail(Cumsumer<EmailTemplate> template) .

EmailTemplate有4个字段

  • 来自
  • 正文
  • 主题

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

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

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

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

    } 

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

我有以下疑问:

  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 的类。它根本没有收到 emailTemplate 实例/状态。

Is it good idea to do like that?

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

Any better approach to do this using lambda?

Lambda 定义行为/方法体。对稍后提供给他们的对象执行操作。在此示例中,我根本看不到对 lambda 的需要

关于java - 如何在方法内部更改传递的 Lambda 表达式的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796602/

相关文章:

c# - 使用函数作为 Action 参数

c# - 从 Expression 函数获取父属性

java - 如何解决paho mqtt客户端的异步连接问题?

java - Clojure 与 Var.intern 和 RT.var 的怪异

c++ - 静态(可能是 constexpr)数据成员 l​​ambda

java - 用另一个路径拆分目录路径

java - 将 Map<?, Map<?, ?> 转换为对象列表

java - 如何从 Temporal 获取 TimeZone?

java - 仅当子类强制转换为父类时才调用子类的方法?

java - 我应该在 Spring 项目中将哪些类转向 bean?