Có một lựa chọn thứ tư ngoài những lựa chọn trong câu trả lời của mfulton26.
Bằng cách sử dụng ?.
toán tử, có thể gọi các phương thức cũng như các trường mà không cần xử lý let
hoặc sử dụng các biến cục bộ.
Một số mã cho bối cảnh:
var factory: ServerSocketFactory = SSLServerSocketFactory.getDefault();
socket = factory.createServerSocket(port)
socket.close()//smartcast impossible
socket?.close()//Smartcast possible. And works when called
Nó hoạt động với các phương thức, các trường và tất cả những thứ khác mà tôi đã cố gắng để nó hoạt động.
Vì vậy, để giải quyết vấn đề, thay vì phải sử dụng phôi thủ công hoặc sử dụng biến cục bộ, bạn có thể sử dụng ?.
để gọi các phương thức.
Để tham khảo, điều này đã được thử nghiệm trong Kotlin 1.1.4-3
, nhưng cũng đã được thử nghiệm trong 1.1.51
và 1.1.60
. Không có gì đảm bảo nó hoạt động trên các phiên bản khác, nó có thể là một tính năng mới.
Sử dụng ?.
toán tử không thể được sử dụng trong trường hợp của bạn vì đó là một biến được thông qua đó là vấn đề. Toán tử Elvis có thể được sử dụng thay thế và có lẽ đây là toán tử yêu cầu số lượng mã ít nhất. Thay vì sử dụng continue
mặc dù, return
cũng có thể được sử dụng.
Sử dụng đúc thủ công cũng có thể là một tùy chọn, nhưng điều này không an toàn:
queue.add(left as Node);
Có nghĩa là nếu trái đã thay đổi trên một chủ đề khác, chương trình sẽ sụp đổ.