Do we really want to accept null, or is null an indication of a programming error (i.e. throw NullPointerException via `checkNotNull`)?