By Alvin Alexander. Last updated: May 1, 2017
A Null Object is an object that extends a base type with a null or neutral behavior. Here’s the Scala version of the Java example Wikipedia uses to demonstrate this:
trait Animal {
def makeSound()
}
class Dog extends Animal {
def makeSound() { println("woof") }
}
class NullAnimal extends Animal {
def makeSound() {}
}
As you can imagine, later in your application you might have some code like this:
val a = getAnAnimal() // some sort of Animal factory here a.makeSound()
In this case, if the Animal that was returned is a Dog, the string woof would be printed, but if the Animal was a NullAnimal, nothing would happen. But that’s a good thing: Because getAnAnimal didn’t return a null value, a NullPointerException wasn’t thrown. A Null Object lets your program go on along its merry way.
Option, Some, and None
“Hey”, you might say, “this seems like the Scala Option, Some, and None approach.”
“Fascinating”, I reply, doing my best Spock impersonation.

