12
\$\begingroup\$

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?

\$\endgroup\$

1 Answer 1

19
\$\begingroup\$

@InheritConstructors is probably what you are looking for:

@InheritConstructors
class AnotherClass extends BaseClass {}

will create the constructors corresponding to the superclass constructors for you.

\$\endgroup\$
1
  • 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 package groovy.transform. \$\endgroup\$
    – Andrea
    Commented Jul 16, 2012 at 8:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.