When classes declare that they have an @javax.inject.Injected method, dependency injection tools must call those methods after first calling any @javax.inject.Inject constructor, and performing any field injection. These methods are part of the initialization contract for the object.

When subclasses override methods annotated with @javax.inject.Inject and don't also annotate themselves with @javax.inject.Inject, the injector will not call those methods as part of the subclass's initialization. This may unexpectedly cause assumptions taken in the superclass (e.g.: this post-initialization routine is finished, meaning that I can safely use this field) to no longer hold.

This compile error is intended to prevent this unintentional breaking of assumptions. Possible resolutions to this error include:

  • @Inject the overridden method, calling the super method to maintain the initialization contract.
  • Make the superclass' method final to avoid subclasses unintentionally masking the injected method.
  • Move the initialization work performed by the superclass method into the constructor.
  • Suppress this error, and very carefully inspect the initialization routine performed by the superclass, making sure that any work that needs to be done there is done in an @Inject method in the subclass. You may want to refactor portions of the body of the superclass method into a protected method for this subclass to use.