Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
up vote 14 down vote accepted

@InheritConstructors is probably what you are looking for:

@InheritConstructors
class AnotherClass extends BaseClass {}

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

share|improve this answer
1  
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. – Andrea Jul 16 '12 at 8:01

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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