2017-07-26 85 views
2

如果我有一個代碼片段像沒有辦法告訴科特林編譯器之前調用函數已經沒有了空支票

val myNullableString : String? 
val resultingString = if (myNullableString.isNullOrBlank()) 
myNullDefaultString else String.format(myNullableString!!, someOtherString) 

我不得不使用myNullableString!!String.format()因爲編譯器將無法弄清楚該isNullOrBlank()包括一個空檢查。這是正確的還是有任何方法告訴編譯器,一個函數會推斷該實例不是null?

回答

0

沒有看到任何提到,有一種方法來告訴此類信息的編譯器,但這裏是一個解決辦法:?有函數返回null如果字符串是空的,用Let {}是

inline fun String?.nullIfBlank(): String? = if (this?.isBlank() ?: true) null else this 

val resultingString: String = myNullableString.nullIfBlank()?.let { 
    String.format(it) 
} ?: myNullDefaultString 
+1

我覺得你的問題的代碼是非常明顯的。既然你知道'myNullableString'在else情況下不能爲null,所以使用!!是安全的。我寧願等待更新,而不是寫一些額外的功能。 – BakaWaii

0

編譯後,才能明確表達檢查執行從空類型到非空的智能施法,像myNullableString != null

相關問題