我有一个类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
的任何字段。
我有以下问题:
答案 0 :(得分:4)
是否可以在方法中更改传递的lambda的值(如 以上)?
没有。 sendMail()方法接受emailTemplate的使用者。哪个不是emailTemplate本身。使用者是一个接受emailTemplate并对其执行某些操作的函数。如果要设置第四个字段,则需要在lambda内部执行此操作。 sendEmail()方法实际上是接收一个可以处理emailTemplate的类。它根本没有收到emailTemplate实例/状态。
这样做是不是好主意?
这取决于您希望如何设计sendMail()方法以及您希望它具有哪些责任。通过它的外观(并保持简单),sendEmail()方法应该接收emailTemplate对象(而不是消费者)。如果您只收到消费者,那么您唯一能做的就是在emailTemplate对象上调用/应用它(您当前没有发送到sendEmail()方法)
使用lambda做任何更好的方法吗?
Lambdas定义行为/方法体。对稍后提供给他们的对象的行为。在这个例子中,我认为不需要lambdas