Actualmente estoy en el proceso de cambiar de java a kotlin y una de las ventajas indicadas que sigue apareciendo es que kotlin es seguro para nulos y, de forma predeterminada, no se puede asignar un valor nulo a variables u objetos, pero hay formas de asignar un valor nulo. Sin embargo, no estoy seguro de por qué esto es beneficioso. ¿Qué problemas surgen de que Java no sea nulo seguro?
Hasta ahora, las búsquedas en línea solo han arrojado descripciones de qué es la seguridad nula y no por qué se implementó. Gracias por adelantado.
Nada de seguridad...
Es fácil olvidar que una referencia de miembro en su clase podría ser nula. Si usa lo que cree que es una referencia de objeto pero en realidad es nulo, obtiene una NullPointerException.
No existe una forma impuesta por el compilador para que un método declare que solo puede manejar parámetros no nulos. El autor puede marcarlo con alguna anotación o poner una nota al respecto en la documentación del método, pero aún se pueden pasar valores nulos y causar una NullPointerException u otra excepción a elección del autor.
No existe una forma impuesta por el compilador para que un método lo declare y devuelva un valor nulo. El autor puede mencionarlo en la documentación o agregarle alguna anotación, pero si no se da cuenta o lo olvida, puede intentar usar un valor de retorno nulo como referencia de objeto y causar una NullPointerException.
El código que una vez funcionó puede dejar de funcionar y comenzar a generar NullPointerExceptions si un método que nunca devolvió un valor nulo a veces comienza a generar un valor nulo. Dado que el compilador no lo hace cumplir, obtiene la excepción en tiempo de ejecución en lugar de obtener un error del compilador para que pueda solucionarlo.