Hacker News new | comments | show | ask | jobs | submit login
Handling Associations on Null Objects in Rails (thoughtbot.com)
21 points by rabidferret 1260 days ago | hide | past | web | 3 comments | favorite


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.

Bah! I know the JVM is now double-check-locking safe but http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLo...

Just put a `synchronized` on it and call it good. The JVM is so damn fast, _nearly_ all the stuff in the Haggar book (Practical Java) is not applicable anymore.

The null object is a beautiful device. http://en.wikipedia.org/wiki/Initial_object

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact