, . , ( : Groovy 2.3 !) , , @Mixin, .
: @Delegate - , , , Chest Container. .
, Groovy as, .
, abstract :
import groovy.transform.TypeChecked as TC
interface HasMass { double mass }
interface HasContent { Entity[] getContent() }
@TC class Entity implements HasMass { double mass }
@TC class Location {
Entity[] getContent() {
[new Entity(mass: 10.0), new Entity(mass: 20.0)] as Entity[]
}
}
. HasContent Location, as.
-, Container Chest. @Delegate :
@TC
abstract class Container {
@Delegate Location location = new Location()
@Delegate Entity entity = new Entity()
}
@TC class Chest extends Container { }
, , :
@TC class Mult {
static main(args) {
def x
Container c = new Chest()
HasMass e = c
x = e.mass
def l = c as HasContent
x = l.content
assert c.content.collect { Entity it -> it.mass } == [10.0, 20.0]
}
}