All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.l10n.java.rules.squid.S1699.html Maven / Gradle / Ivy

Calling an overridable method from a constructor could result in failures or strange behaviors when instantiating a subclass which overrides the method.

For example:

  • The subclass class constructor starts by contract by calling the parent class constructor.
  • The parent class constructor calls the method, which has been overridden in the child class.
  • If the behavior of the child class method depends on fields that are initialized in the child class constructor, unexpected behavior (like a NullPointerException) can result, because the fields aren't initialized yet.
  • Noncompliant Code Example

    public class Parent {
    
      public Parent () {
        doSomething();  // Noncompliant
      }
    
      public void doSomething () {  // not final; can be overridden
        ...
      }
    }
    
    public class Child extends Parent {
    
      private String foo;
    
      public Parent(String foo) {
        super(); // leads to call doSomething() in Parent constructor which triggers a NullPointerException as foo has not yet been initialized
        this.foo = foo;
      }
    
      public void doSomething () {
        System.out.println(this.foo.length());
      }
    
    }
    




© 2015 - 2025 Weber Informatics LLC | Privacy Policy