Oui, mais le truc c'est qu'une méthode du style
Optional<Address> getDeliveryAddress()
documente clairement le fait que tu recevras éventuellement "null" en retour, et après si tu décides de ne pas checker c'est clair que ce n'est pas mieux que tester pour null.
Le problème c'est que si tu obtiens un "null" d'une telle méthode et que tu n'y prends pas garde, ça peut être 50 méthodes plus loin que tu te paies une NPE, avec Optional si tu accèdes à l'objet sans tester et que celui-ci est vide, ça saute immédiatement avec NoSuchElement. Ca ne peut plus être une simple faute d'inattention ou un biais dans la documentation d'une API, c'est vraiment un choix délibéré.
Il y a des langages pour la JVM plus récents qui vont plus loin en distinguant les références nullables et autres. par exemple avec ceylon si tu écris
String name = "Jean" //ok
String name = null //ne compile pas
String? name = null //ok
Et la valeur référencée par String? ne peut être utilisée qu'après un test, c'est forcé par le compilateur.
Tu as cela aussi en kotlin et contrairement à java, ce n'est pas un ajout de dernière minute qui ne remet rien en question, c'est built-in dans le langage dès le départ.