我正在查找有关 lambda 的信息,尽管我无法找到类似于以下函数的内容。它属于 org.springframework.test.web.servlet.result.JsonPathResultMatchers 类,ResultMatcher 是一个@FunctionalInterface,result 是 MvcResult 类型,jsonPathHelper.doesNotExist 返回 void

public ResultMatcher doesNotExist() {
    return result -> jsonPathHelper.doesNotExist(getContent(result));
}

我调用上面一个通过
jsonPath("$._embedded" ).doesNotExist()

我真的不知道:
  • 如果 jsonPathHelper.doesNotExist 返回 void 那么为什么 doesNotExist 返回 ResultMatcher。
  • 类有任何类似于 结果 的东西,这个论点从何而来?

  • 谢谢

    最佳答案

    代码中的 lambda:

    result -> jsonPathHelper.doesNotExist(getContent(result));
    

    只是 ResultMatcher 的表示,因为它是 FunctionalInterface 。你可以这样看:
    public ResultMatcher doesNotExist() {
        return new ResultMatcher() {
            @Override
            public void match(MvcResult result) throws Exception {
                jsonPathHelper.doesNotExist(getContent(result)); // returns void
            }
        };
    }
    



    您的方法 doesNotExist 仅返回功能接口(interface)本身,此后可用于调用其 match 函数。请注意,调用也会返回 void



    如果您查看上面的匿名类,使用 lambda 表示,result 将成为 match 实现中 ResultMatcher 方法的参数。

    因此,当您确实希望访问此实现(或一般的 ResultMatcher)时,您可以按如下方式调用该方法(简化初始化):
    ResultMatcher resultMatcher =  doesNotExist(); // your method returns here
    MvcResult result = new MvcResult(); // some MvcResult object
    resultMatcher.match(result); // actual invocation
    

    关于jsonpath 库的 java 8 lambda 技术问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54083561/

    10-10 07:17