【问题标题】:Replace Anonymous Inner Class By Lambda. How does this work?用 Lambda 替换匿名内部类。这是如何运作的?
【发布时间】:2015-08-07 13:54:13
【问题描述】:

在发送 SOAP 消息时,我想添加一些自定义标头,所以我如下所示;

JAXBElement<ConfigurationResponse> jaxbElementResponse = (JAXBElement<ConfigurationResponse>) getWebServiceTemplate()
                        .marshalSendAndReceive(urlToSend,
                                new ObjectFactory().createConfigurationRequest(request),
                                new WebServiceMessageCallback() {
                                    @Override
                                    public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
                                        SaajSoapMessage soapMessage = (SaajSoapMessage) message;
                                        SoapHeaderElement id = soapMessage.getSoapHeader().addHeaderElement(new QName(uri, localpart, prefix));
                                        id.setText(text);
                                    }
                                });

但是“NetBeans”告诉我我可以使用 lambda expr。因此,如果我进行更改,就像,

JAXBElement<ConfigurationResponse> jaxbElementResponse = (JAXBElement<ConfigurationResponse>) getWebServiceTemplate()
                        .marshalSendAndReceive(urlToSend,
                                new ObjectFactory().createConfigurationRequest(request), (WebServiceMessage message) -> {
                                    SaajSoapMessage soapMessage = (SaajSoapMessage) message;
                                    SoapHeaderElement id = soapMessage.getSoapHeader().addHeaderElement(new QName(uri, localpart, prefix));
                                    id.setText(text);
                });

两者都一样吗?如果是,它是如何工作的?

【问题讨论】:

  • 不一样,更好!特别是它不会捕获this 对象。
  • @TagirValeev:太好了!但我不明白这是如何工作的。例如,即使不提及方法名称,它如何使用doWithMessage()

标签: soap lambda java-8


【解决方案1】:

Lambda 表达式是匿名类的语法糖。只要类型是函数式接口,就可以使用 Lambda,这是一个只声明一个抽象方法的接口。 Lambda 表达式提供了该单一方法的实现。

对于您的情况,WebServiceMessageCallback 是一个功能接口。它有一个抽象方法:doWithMessage(...)。您创建的 Lambda 表达式提供了该方法的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2011-10-21
    • 2020-05-02
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多