Поведение аналогично, но @Delegate
и @Mixin
реализованы совершенно по-разному.
@Delegate
генерирует методы доступа во время компиляции. У супергероя будет метод с именем walk()
, который просто вызывает person.walk()
. Сгенерированные методы можно увидеть, выгрузив файл класса Superhero с javap
.
@Mixin
, с другой стороны, просто создает небольшую заглушку, которая смешивается в методах Person
во время выполнения. Он использует мета-объектный протокол groovy, чтобы Superhero мог реагировать на методы Person. В этом случае вы не увидите никаких методов Person в Superhero.class
.
@Delegate
имеет то преимущество, что методы могут вызываться из Java, и это позволяет избежать динамического вызова. Кроме того, @Mixin
не может дополнить класс свойствами.