I'm not familiar with @Nullable (just looking it up now), but have become quite fond of Guava's Optional<T>. It's a bit wordy, but it seems like a great example of how to make the type system work for you by finding your mistakes as early as possible,