首页 > 解决方案 > 创建自定义参数匹配器混淆实现

问题描述

我见过有人创建了一个自定义参数匹配器,如下所示。但是,我很难理解它是如何工作的。

我可以理解它的一个方法,它接受一个参数并返回一个 ArgumentMatcher,它是一个类型为List<Person>. 而被覆盖的方法是使用 lambda 的匹配器。我认为身体部分是最令人困惑的,如果有人能解释的话。

private ArgumentMatcher<List<Person> personListSize(final int size) {
        return argument -> argument.personList().size() == size;
}

这是我通常会做这样的事情的方式,这对我来说更容易理解,只是想知道我怎样才能让下面看起来像上面那样?

public class CustomArgumentMatcher implements ArgumentMatcher<List<Person>> {

    @Override
    public boolean matches(List<Person> argument) {
        return argument.size() == size;
    }
}

刚刚开始理解,这有效:

 private ArgumentMatcher<String> stringMatcher = new ArgumentMatcher<String>() {
        @Override
        public boolean matches(String argument) {
            return argument.contains("");
        }
    };

但是,如果我像这样添加要传入的参数:

 private ArgumentMatcher<String> stringMatcherArgs(final String name) = new ArgumentMatcher<String>() {
}

我收到一条错误消息,说unexpected token只是想在上面传递一个参数?

标签: javamockito

解决方案


您应该阅读有关Lambda 表达式的文档

以下是您的示例:

private ArgumentMatcher<List<Person>> customArgumentMatcher(final int size) {
    return argument -> argument.size() == size;
}
private ArgumentMatcher<List<Person>> stringMatcherArgs(final String name) {
    return argument -> argument.contains(name);
}

推荐阅读