Укажите аргумент, который должен реализовывать более одной черты - PullRequest
0 голосов
/ 05 апреля 2020

Чтобы проиллюстрировать мой вопрос, лучше в качестве примера: допустим, я хочу провести триатлон, в результате чего triathletes должен Swim, Run, Cycle, поэтому у меня есть 3 черты:

trait Swimmer {
    abstract void swim()
}

trait Runner {
    abstract void run()
}

trait Cyclist {
    abstract void cycle()
}

Все эти черты вместе составляют Triathlete:

trait Triathlete extends Swimmer, Runner, Cyclist {
}

, который может затем выполнить триатлон:

def triathlon(Triathlete triathlete) {
    triathlete.run()
    triathlete.cycle()
    triathlete.swim()
}

В настоящее время я определяю DSL в groovy, и в этом случае использования, на самом деле не имеет смысла определять эту промежуточную черту Triathlete. Так есть ли способ объявить triathlon, используя Swimmer & Runner & Cyclist?

Я не знаю, есть ли что-то в самом языке, чтобы сделать это, я думаю, есть способ сделать это с AstBuilder или лайки, но я еще не достиг своего уровня groovy, чтобы реализовать что-то подобное, но я ищу что-то вроде этого

void triathlon(Swimmer & Runner & Cyclist triathlete) {
    triathlete.run()
    triathlete.cycle()
    triathlete.swim()
}

1 Ответ

0 голосов
/ 05 апреля 2020

Хорошо, я понял это, просто поместив это для использования другими, вы можете использовать дженерики здесь, чисто Java нет Groovy необходимо:

static <T extends Swimmer & Runner & Cyclist> void triathlon(T triathlete) {
    triathlete.run()
    triathlete.cycle()
    triathlete.swim()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...