Kotlin security nula?

Tengamos una function foo y una class Bar :

 fun foo(key: String): String? { // returns string or null } class Bar(x: String, y: String) { // ... } 

Ahora, tengamos el código:

 val x = foo("x") val y = foo("y") if (x.isNotEmpty() && y.isNotEmpty()) return Bar(x, y) 

El problema es que este código no se comstackrá. Ya que necesita la Bar(x!!, y!!) .

Sin embargo cuando reemploop la function con su contenido, !! no son necesarios

 val x = foo("x") val y = foo("y") if ((x != null && x.length() > 0) && (y != null && y.length() > 0)) return Bar(x, y) 

¿Por qué no es posible resolver la verificación nula de la function .isNotEmpty() ?

    Esto es posible en teoría, pero significaría que o bien 1. La statement de isNotEmpty () debe transmitir al comstackdor el hecho de que x se garantiza que no será nulo si el resultado es verdadero 2. Un cambio en un cuerpo de cualquier function puede hacer que sus sitios de llamadas no compilen.

    La opción 2 es definitivamente inaceptable. La opción 1 requiere un mecanismo bastante expresivo en el sistema de types, que decidimos no agregar en este momento, porque es probable que complique las cosas para el usuario.

    Estamos planeando apoyar algo como esto con las funciones en línea, pero aún está bajo consideración.