lateinit modificateur n'est pas autorisé sur le type primitif des propriétés dans Kotlin
Je suis définir comme une variable d'instance dans kotlin
et souhaitez initialiser onCreate
méthode d'un activity
.
var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
Ici, je suis d'erreur ci-dessous sur la variable nombre.
Propriété doit être initialisé ou être résumé en Kotlin
Bien, j'ai lu ce fil La propriété doit être initialisé ou abstrait et essayé même mais encore une fois je suis d'erreur ci-dessous.
lateinit modificateur n'est pas autorisé sur le type primitif des propriétés
lateinit var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
Est-il un moyen de le faire dans Kotlin
?
- vous pouvez l'initialiser à 0 au départ.
- voir: stackoverflow.com/a/44206094/3679676
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons de résoudre ce problème.
Vous pouvez l'Initialiser avec la valeur par défaut (e.je
0
ou-1
ou autre) et puis l'initialiser à chaque fois que votre logique dit.Ou dire compilateur qui comptent sera initialisé plus tard dans ce code à l'aide de
Delegates.notNull
vérifier notNull.Et si vous avez besoin de valeur de nombre à la demande (si pas nécessaire de l'initialiser dans
onCreate
), vous pouvez utiliserlazy
fonction. À n'utiliser que si vous avez un intensif (Certains calculs/Gonfler une mise en page etc) de la tâche que vous voulez faireon demand
, de ne Pas attribuer une valeur.Maintenant, vous pouvez décider quels produits utiliser.
J'espère que cela aide.
var count: Int by Delegates.notNull<Int>()
résout le problème de la@ ConfigurationProperties
classe au Printemps qui obtient des valeurs primitives à partir des propriétés de fichier, sans nécessité de fournir de la valeur par défaut statique.Il n'y a pas de raison de le laisser non initialisée. Juste l'initialiser à 0 ou -1.
lateinit
est non-nulle des références à des objets qui ne peuvent pas facilement être initialisé dans le corps de la classe de définition.isInitialized
il fait beaucoup de sens de laisser une propriété non initialisé, peut - être 0 et -1 sont à la fois les valeurs après l'initialisation?