3 comments

[ 3.1 ms ] story [ 14.0 ms ] thread
http://www.infoq.com/presentations/Null-References-The-Billi...

I often see code such as:

    public Object getObject() {
      return this.object;
    }
I favour lazy initialization combined with self-encapsulation:

    private Object getObject() {
      Object o = this.object;

      if( o == null ) {
        o = createObject();
        this.object = o;
      }

      return o;
    }
This is thread-safe and allows injecting new behaviour via polymorphism (overriding the "create" methods in a subclass), which adheres to the Open-Closed Principle. It also eliminates the possibility of accidentally dereferencing nulls.

It could even be implemented as a language feature:

    public class C {
      nullsafe String name;

      public void greeting() {
        System.out.printf( "Hello, %s\n", getName() );
      }
    }
Where the "nullsafe" keyword automatically generates a private accessor and corresponding protected creation method.