2017-07-26 1 views
2

Si j'ai un fragment de code commeToute façon de dire compilateur Kotlin cette fonction appelable avant déjà fait un chèque nul

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

Je dois utiliser myNullableString!! dans String.format() car le compilateur ne serait pas en mesure de comprendre que isNullOrBlank() inclut une vérification nulle. Est-ce correct ou est-il possible de dire au compilateur qu'une fonction déduira que l'instance n'est pas nulle?

Répondre

0

ne voit pas de mentions qu'il ya une façon de dire telle information au compilateur, mais voici une solution:. Fonction ayant retour nulle si la chaîne est vide et utiliser laisser {} après

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

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

Je pense que le code dans votre question est assez claire. Puisque vous savez que myNullableString ne doit pas être nul dans le cas else, il est sûr d'utiliser !! Je préfère attendre la mise à jour au lieu d'écrire une fonction supplémentaire. – BakaWaii

0

compilateur peut effectuer coulé à puce de type nullable à la non-annulable seulement après l'expression de contrôle explicite, comme myNullableString != null