num
doit être nullable lorsqu'il est défini, mais ce qu'il retourne doit toujours être non nullable (avoir une valeur par défaut).Avoir un getter renvoie un type non-nullable même si le champ de support est nullable
class Test {
var num: Int? = null
get() = field ?: 5 // default value if null
}
Ce qui suit ne compile pas, même si la valeur retournée est toujours non nul qui me semble logique, parce que le type est déduit, mais pris dans le champ de support:
val a: Int = Test().num
Incompatibilité de type: le type inféré est Int? mais Int devrait
La question est de savoir comment puis-je changer le type de retour de ce getter non annulable? Si je le fais, le compilateur dit:
Getter type de retour doit être égal au type de la propriété, à savoir 'Int?
Je sais que je pourrais le résoudre avec une autre propriété numNotNullable
(sans champ de support).
class Test {
var num: Int? = null
get() = field ?: 5 // default value if null
val numNotNullable: Int
get() = num ?: 5
}
val c: Int = Test().numNotNullable
Mais ce n'est pas ce que je veux. Existe-t-il un autre moyen?
Puisque vous savez que c'est sûr, vous pouvez utiliser techniquement '.num !!'. Ce n'est pas génial, mais c'est toujours prudent dans ce cas. – chris
Votre solution de sauvegarde est certainement la bonne, c'est même l'exemple pour sauvegarder les propriétés dans la documentation https://kotlinlang.org/docs/reference/properties.html#backing-properties – zsmb13