Kotlin有一個名爲string templates的功能。在字符串中使用可空變量是否安全?字符串模板中的可爲空的var
override fun onMessageReceived(messageEvent: MessageEvent?) {
Log.v(TAG, "onMessageReceived: $messageEvent")
}
請問上面的代碼拋出NullPointerException
如果messageEvent
是null
?
Kotlin有一個名爲string templates的功能。在字符串中使用可空變量是否安全?字符串模板中的可爲空的var
override fun onMessageReceived(messageEvent: MessageEvent?) {
Log.v(TAG, "onMessageReceived: $messageEvent")
}
請問上面的代碼拋出NullPointerException
如果messageEvent
是null
?
你總是可以做出try.kotlinlang.org一個小項目,並看到自己:
fun main(args: Array<String>) {
test(null)
}
fun test(a: String?) {
print("result: $a")
}
此代碼編譯罰款和打印null
。爲什麼會發生?我們可以在extension functions檢查出的文檔,它說,toString()
方法(這將在您的messageEvent
參數來調用,以String
出來的)聲明,像這樣:
fun Any?.toString(): String {
if (this == null) return "null"
// after the null check, 'this' is autocast to a non-null type, so the toString() below
// resolves to the member function of the Any class
return toString()
}
所以,基本上,它會檢查其首先參數是null
,如果不是,則調用此對象的成員函數。
感謝http://try.kotlinlang.org/ – naXa
這可能很容易在5秒內被您測試。是否有某些原因,您不只是嘗試它,或閱讀文檔? –
@JaysonMinard在StackOverflow上沒有類似的問題,在文檔中找到相關主題並不那麼容易(正如你可以看到自己https://www.google.by/search?q=Null+inside+string+模板+科特林)。我相信唯一不好的問題就是那個沒有被問到的問題。現在,當它被問到時,可能會在5秒內被某人搜索到(無需構建並運行測試應用程序)。 – naXa
但是在堆棧溢出中存在一個不應該被問到的問題。從適度和複習的人那裏花費時間去解決任何人都可以用最少的功課解決的問題。所以你沒有做任何研究,併發布你的嘗試,這是一個很大的跡象,你不準備問一個問題。 http://meta.stackexchange.com/a/59995/312466 ...問題的一部分是「你到底做了什麼來解決它」,其中你沒有嘗試3行代碼。如果您發現了一些答案,您可以將其作爲自己回答的問題發佈,以便稍後幫助其他人Google。 –