jsonpath库的Java 8 lambda技术问题

时间:2019-01-08 00:01:21

标签: java lambda java-8 spring-test

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

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

我打通以上电话

jsonPath("$._embedded" ).doesNotExist()

我真的不知道:

  1. 如果jsonPathHelper.doesNotExist返回void,那么为什么NotExist返回ResultMatcher。

  2. 类具有与结果类似的任何东西,该参数来自何处?

谢谢

1 个答案:

答案 0 :(得分:3)

您的代码中的lambda:

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

只是ResultMatcher的一种表示形式。您可以像看它一样:

FunctionalInterface
  

如果jsonPathHelper.doesNotExist返回void,为什么不这样做   返回ResultMatcher

您的方法public ResultMatcher doesNotExist() { return new ResultMatcher() { @Override public void match(MvcResult result) throws Exception { jsonPathHelper.doesNotExist(getContent(result)); // returns void } }; } 仅返回其本身的功能接口,此后可用于调用其doesNotExist函数。请注意,调用也将返回match

  

类与结果有任何相似之处,该参数在哪里   来自?

如果您查看上面的匿名类,以lambda表示,则void成为result实现中match方法的参数。

因此,当您实际上希望访问此实现时(或通常访问ResultMatcher),可以按以下方式调用该方法(简化的初始化):

ResultMatcher