lamda表达式动态实现接口

本文探讨了在Spring Boot中使用MockMvc进行接口测试时,如何利用Lambda表达式实现ResultMatcher接口,以验证视图名称。通过具体代码示例,深入解析了Lambda表达式在MockMvcResultMatchers.view().name()方法中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用MockMvc测试接口的时候,在使用MockMvcResultMatchers.view().name("")的时候进入name方法看了一下,发现了一个有意思的代码:

public ResultMatcher name(String expectedViewName) {
        return (result) -> {
            ModelAndView mav = result.getModelAndView();
            if (mav == null) {
                AssertionErrors.fail("No ModelAndView found");
            }

            AssertionErrors.assertEquals("View name", expectedViewName, mav.getViewName());
        };
    }

这里返回了一个lambda表达式。明明返回类型为ResultMatcher,为啥可以返回lambda表达式,然后查看ResultMatcher的源码:

@FunctionalInterface
public interface ResultMatcher {
    void match(MvcResult var1) throws Exception;
}

发现ResultMatcher只是一个有一个matcher方法的接口,matcher方法里的参数为MvcResult类型。
所以lambda表达式i的result相当于是对应这个MvcResult类型的参数。
则整个name方法里返回这个lambda表达式相当于返回了对应的ResultMatcher,相当于用lambda表达式匿名实现了这个接口的类的实例,其实这种做法就相当于new ResultMatcher{}然后再花括号内实现方法(匿名接口实现)。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值