• Как исправить нарушение принципа DRY?

    @IRuuy Автор вопроса
    mayton2019, Но если понадобится добавить ещё один метод который сопоставляет, например, два поля из класса, в этом случае снова копипастить один и тот же метод, меняя только условие?
  • Как исправить нарушение принципа DRY?

    @IRuuy Автор вопроса
    Стоит отметить, что в вашем решении в одном условии обрабатывается, как существование токена, так условие с его вызовом. Но как вызвать условие для токена, которого не существует?
    Правильнее будет разбить на два:
    private Token matchInternal(Suplier<Boolean> condition, int tokenNum) {
        if(hasToken(_currentTokenNum))
            if (condition.get())
                return getToken(tokenNum);
    }