如何在方法内部更改传递的 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
的任何字段。
我有以下疑问:
- 是否可以在方法中更改传递的 lambda 值(如上)?
- 这样做是个好主意吗?
- 使用 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 的需求
我有一个 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
的任何字段。
我有以下疑问:
- 是否可以在方法中更改传递的 lambda 值(如上)?
- 这样做是个好主意吗?
- 使用 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 的需求