Java 8 在java8中,如何仅使用自定义代码定义函数?
我想发送两种电子邮件,一些逻辑可以共享。e、 gJava 8 在java8中,如何仅使用自定义代码定义函数?,java-8,Java 8,我想发送两种电子邮件,一些逻辑可以共享。e、 g try { MimeMessage msg = javaMailService.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING); //custom code here ... } catch (MessagingException e) { logger.error(
try {
MimeMessage msg = javaMailService.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING);
//custom code here ...
} catch (MessagingException e) {
logger.error("build email fail", e);
} catch (Exception e) {
logger.error("send email fail", e);
}
上面是通用代码(例如sendEmail(函数customCode)),下面是向foo发送电子邮件的自定义代码
logger.info("send count mail to {}", toFoo);
helper.setFrom(sender);
helper.setTo(toFoo);
helper.setSubject("Foo Subject");
String content = generateFooContent(foo); //use fooTemplate.ftl
helper.setText(content, true);
javaMailService.send(msg);
我想这样说,
Function fooFunc = ()->{logger.info("send count mail to {}", toFoo);
helper.setFrom(sender);
helper.setTo(toFoo);
helper.setSubject("Foo");
String content = generateFooContent(foo);
helper.setText(content, true);
javaMailService.send(msg);}
然后调用sendmail
方法
sendEmail(fooFunc);
如果我想发送酒吧信息
Function barFunc = ()->{...} //cunstom code here
sendEmail(barFunc);
在java8中可以实现这一点吗?如果可以,如何实现?您的“函数”有一个签名:
void doStuff(MimeMessageHelper helper)
我们已经有了其中一个——它被称为消费者
因此:
请注意我的格式。谢谢@Boris the Spider,它确实有效,请参见下文
private void sendFooHtmlMessage(List<Foo> body) {
BiConsumer<MimeMessage,MimeMessageHelper> fooFunc = (msg,helper) -> {
logger.info("send foo mail to {}", toFoo);
try {
helper.setTo(toFoo);
helper.setSubject("Foo Subject");
String content = generateFooContent(body);
helper.setText(content, true);
javaMailService.send(msg);
} catch (Exception e) {
}
};
sendMessage(fooFunc);
}
private void sendMessage(BiConsumer<MimeMessage,MimeMessageHelper> consumer) {
try {
final MimeMessage msg = javaMailService.createMimeMessage();
final MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING);
helper.setFrom(sender);
consumer.accept(msg, helper);
} catch (MessagingException e) {
logger.error("build email failed", e);
} catch (Exception e) {
logger.error("send email failed", e);
}
}
public interface SendMessageAction {
void action(MimeMessage msg, MimeMessageHelper helper) throws MessagingException;
}
private void sendMessage(SendMessageAction action) {
//...
}
private void sendFooHtmlMessage(List<Foo> body) {
SendMessageAction fooAction = (msg, helper) -> {
logger.info("send foo mail to {}", toFoo);
//...
};
sendMessage(fooAction);
}
谢谢但还有一个问题,请看我下面的帖子。首先,将你的答案改写为完整答案,而不是引用我答案的评论。第二,如果你打算使用你自己的功能界面;使用
@functioninterface
对其进行注释。第三,请参阅我的答案-在参数中不需要消息
,只需在回调中填充消息,然后用公共代码发送消息。
private void sendFooHtmlMessage(List<Foo> body) {
BiConsumer<MimeMessage,MimeMessageHelper> fooFunc = (msg,helper) -> {
logger.info("send foo mail to {}", toFoo);
try {
helper.setTo(toFoo);
helper.setSubject("Foo Subject");
String content = generateFooContent(body);
helper.setText(content, true);
javaMailService.send(msg);
} catch (Exception e) {
}
};
sendMessage(fooFunc);
}
private void sendMessage(BiConsumer<MimeMessage,MimeMessageHelper> consumer) {
try {
final MimeMessage msg = javaMailService.createMimeMessage();
final MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING);
helper.setFrom(sender);
consumer.accept(msg, helper);
} catch (MessagingException e) {
logger.error("build email failed", e);
} catch (Exception e) {
logger.error("send email failed", e);
}
}
public interface SendMessageAction {
void action(MimeMessage msg, MimeMessageHelper helper) throws MessagingException;
}
private void sendMessage(SendMessageAction action) {
//...
}
private void sendFooHtmlMessage(List<Foo> body) {
SendMessageAction fooAction = (msg, helper) -> {
logger.info("send foo mail to {}", toFoo);
//...
};
sendMessage(fooAction);
}