создание пользовательского сопоставления аргументов запутанной реализации - PullRequest
0 голосов
/ 12 июня 2019

Я видел, как кто-то создавал пользовательское сопоставление аргументов, подобное следующему.Однако мне трудно понять, как это работает.

Что я могу понять, это метод, который принимает параметр и возвращает ArgumentMatcher, который является интерфейсом, имеющим тип List<Person>.И переопределенный метод - это средство сравнения, использующее лямбду.Я думаю, что часть тела является наиболее запутывающей, если кто-то может объяснить это.

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 просто интересно передать параметр в приведенном выше?

Ответы [ 2 ]

2 голосов
/ 22 июня 2019

Вы должны прочитать этот документ о Лямбда-выражениях

Вот ваши примеры:

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);
}
0 голосов
/ 24 июня 2019

Если вы все еще ищете котлинский эквивалент ответа Густаво (обратите внимание, что вы должны были создать другой вопрос),

попробуйте следующее:

fun customArgumentMatcher(size : Int) :  ArgumentMatcher<List<Person>> {
    return object : ArgumentMatcher<List<Person>> {
        override fun matches(argument : List<Person>) = argument.size == size;
    }
}

См. Также: Настройка анонимного интерфейса в Kotlin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...