Mfulton26'nın cevabına ek olarak dördüncü bir seçenek var.
?.
İşleci kullanarak, yöntemleri ve alanları ele almadan uğraşmak mümkündürlet
ya da yerel değişkenleri kullanarak.
Bağlam için bazı kodlar:
var factory: ServerSocketFactory = SSLServerSocketFactory.getDefault();
socket = factory.createServerSocket(port)
socket.close()//smartcast impossible
socket?.close()//Smartcast possible. And works when called
Yöntemler, alanlar ve işe yaramaya çalıştığım diğer tüm şeylerle çalışır.
Bu nedenle, sorunu çözmek için manuel dökümler kullanmak veya yerel değişkenler kullanmak ?.
yerine yöntemleri çağırmak için kullanabilirsiniz .
Referans için, bu Kotlin'de test edildi 1.1.4-3
, aynı zamanda test 1.1.51
ve 1.1.60
. Diğer sürümlerde çalışacağının garantisi yok, yeni bir özellik olabilir.
Kullanmak ?.
sorun olarak bir geçti değişken olduğundan operatörü sizin durumunuzda kullanılamaz. Elvis operatörü alternatif olarak kullanılabilir ve muhtemelen en az kod gerektiren bir operatöre sahiptir. continue
Yine return
de kullanmak yerine, kullanılabilir.
Manuel döküm kullanmak da bir seçenek olabilir, ancak bu null güvenli değildir:
queue.add(left as Node);
Farklı bir iş parçacığında sol değiştiğinde , program çökecektir.