Suppose I have two Classes, one extending the other:
class Person{ String name, int age}
class Pupil extends Person {int grade}
Now to manage several Persons in a List, and add some custom methods, I
use the @Delegate like
class Personlist{
@Delegate List<Person> persons
Personlist underAge(n){persons.findAll{it.age<=n} as Personlist}
}
Pupillist should have the same methods (since each pupil is a person):
class Pupillist extends Personlist{
Pupillist inGrade(g){persons.findAll{it.grade==g} as Pupillist}
}
Now I want to chain several of these methods like this:
def pl = [...] as Pupillist
pl.underAge(12).inGrade(9)
throws a MissingMethodException, because `pl.underAge` gets cast into a
Personlist, which has no method `inGrade`.
I know I could work around this by
a) in the chain of methods, first call the more specialized methods,
then the more general ones – but I don't want to care about that every time.
b) override the `underAge` function in Pupillist with a call to `super`
– but then I'd have to write that boilerplate code I'd hoped to leave
behind by using @Delegate.
Can someone tell me how to properly solve this (design?-) issue?
Thanks in advance
Paul
--
typed with Neo 2 -- an ergonomically optimized keyboard layout
for German, English, programming, and science
http://neo-layout.org/