Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 在java8中,如何仅使用自定义代码定义函数?_Java 8 - Fatal编程技术网

Java 8 在java8中,如何仅使用自定义代码定义函数?

Java 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(

我想发送两种电子邮件,一些逻辑可以共享。e、 g

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);
}