Hay una cuarta opción además de las de la respuesta de mfulton26.
Al usar el ?.
operador, es posible llamar a métodos y campos sin tener que lidiar let
o usar variables locales.
Algún código para el contexto:
var factory: ServerSocketFactory = SSLServerSocketFactory.getDefault();
socket = factory.createServerSocket(port)
socket.close()//smartcast impossible
socket?.close()//Smartcast possible. And works when called
Funciona con métodos, campos y todas las otras cosas que intenté para que funcione.
Entonces, para resolver el problema, en lugar de tener que usar conversiones manuales o usar variables locales, puede usar ?.
para llamar a los métodos.
Como referencia, esto se probó en Kotlin 1.1.4-3
, pero también se probó en 1.1.51
y 1.1.60
. No hay garantía de que funcione en otras versiones, podría ser una nueva característica.
El uso del ?.
operador no se puede usar en su caso, ya que el problema es una variable pasada. El operador de Elvis se puede usar como alternativa, y probablemente sea el que requiera la menor cantidad de código. Sin continue
embargo, en lugar de usar , return
también podría usarse.
El uso de la conversión manual también podría ser una opción, pero esto no es nulo seguro:
queue.add(left as Node);
Es decir, si la izquierda ha cambiado en un hilo diferente, el programa se bloqueará.