Est-il possible d'utiliser la valeur par défaut sans paramètre facultatif lorsque la valeur null est passé?
Par exemple, si j'ai les données suivantes de la classe:
data class Data(
val name: String = "",
val number: Long = 0
)
Et les fonctions qui peuvent retourner null
:
fun newName(): String? {}
fun newNumber(): Long? {}
Je sais que je peux utiliser ce qui suit pour utiliser la valeur des fonctions si elles ne sont pas null
:
val newName = newName()
val newNumber = newNumber()
val data = Data(
if (newName != null) newName else "",
if (newNumber != null) newNumber else 0
)
Mais est-il un moyen d'utiliser la valeur par défaut spécifié dans le constructeur de la Data
classe lorsque les valeurs sont null
?
Je n'ai rien trouvé dans la documentation, mais j'espérais quelque chose de ce genre:
val data = Data(newName()?, newNumber()?)
Mais cela ne veut pas compiler.
- Au lieu de
if (newName != null) newName else ""
vous pouvez simplement utilisernewName ?: ""
. Il s'appelle elvis opérateur. - Ah, oui, j'ai oublié à ce sujet! Certainement plus succincte, mais elle n'est pas toujours utiliser le paramètre par défaut défini dans le constructeur de la classe.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer un secondaire constructeur qui utilise les mêmes valeurs par défaut lors de la réception de
null
:le secondaire constructeur prend en charge uniquement pour les Nullable primitives propriétés. ce qui signifie qu'il sera résultat dans les 2 mêmes constructeurs si la propriété n'est pas un type primitif, par exemple:
une alternative est d'utiliser
invoke
de l'opérateur pour que, par exemple:SI la classe n'est pas une classe de données, alors vous pouvez l'initialisation différée des propriétés de paramètres, plutôt que de définir des propriétés sur le principal constructeur, par exemple: