2017-07-26 47 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

相关问题