Null is your friend, not a mistake
medium.com
medium.com
Null is a concept--there is no data here. We need the concept and code needs to be able to act on it. If you rewrite the code to avoid all possible nulls you have done nothing to ensure that everything is operating on sane data, you have simply removed the easy mechanism that flagged cases the developer failed to handle.
In most cases you're better off going boom than operating on wrong data and getting rid of nulls shifts the balance towards the latter.
Because
int id = args.getOptional().orElseThrow(() -> new Error("id expected"));
isn't that different than the author's Kotlin example.However, it is important to not that `String?` in Kotlin is not a syntactic sugar for `Option<String>`, but a syntactic sugar for `String|null`. The difference between the two might seem minor, but is quite big pragmatically, especially when combined with flow-sensitive typing.