I am new to Groovy and I am having a little problem with constructors of subclasses. Basically, I have a base abstract class like
class BaseClass {
def BaseClass(Map options) {
// Does something with options,
// mainly initialization.
}
// More methods
}
and a bunch of derived classes like
class AnotherClass extends BaseClass {
// Does stuff
}
I would like to be able to create instances like
def someObject = new AnotherClass(foo: 1, bar: 2)
Unfortunately, Groovy creates automatically all sorts of constructors for AnotherClass
, with various signatures - based on the properties of AnotherClass
- but will not allow me to just reuse the constructor in BaseClass
. I have to manually create one like
class AnotherClass extends BaseClass {
def AnotherClass(options) {
super(options)
}
// Does stuff
}
It feels repetitive doing so for each subclass, and it is probably the wrong way.
What would be the Groovy way to share some logic in the constructor?
1 Answer 1
@InheritConstructors
is probably what you are looking for:
@InheritConstructors
class AnotherClass extends BaseClass {}
will create the constructors corresponding to the superclass constructors for you.
-
2\$\begingroup\$ Thank you very much, this is exactly what I was looking for! By the way, for possible future readers,
InheritConstructors
lives in the packagegroovy.transform
. \$\endgroup\$Andrea– Andrea2012年07月16日 08:01:08 +00:00Commented Jul 16, 2012 at 8:01