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