Java went the route of Optional<?> instead of nullable types. You still end up with some nullability issues working with old libraries (and even the std lib, like Map.get()) but by and large you can force a "never use null" policy on Java codebases and NPEs become very rare.
I fairly strongly prefer Optional over nullable types. Especially how it works seamlessly with streams.