我有一个类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(模板)。
我有以下疑问:
- 是否可以在方法内更改传递的 lambda 值(如上)?
- 这样做是个好主意吗?
- 使用 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/