J'ai converti ce code de Java en Kotlin avec Android Studio 3.0
internal var background: Drawable
internal var xMark: Drawable
private fun init() {
background = ColorDrawable(Color.RED)
xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete)
}
Sur les lignes 1 et 2, je reçois l'erreur:
La propriété doit être initialisée ou abstraite
même si cela va être initialisé dans la fonction init.
Est en train d'écrire:
internal var background: Drawable? = null
internal var xMark: Drawable? = null
une solution viable et efficace? Y a-t-il une autre meilleure façon?
Avant d’utiliser lateinit
, vous devez comprendre ce que cela signifie.
Vos variables ne sont pas initialisées correctement. Divers moyens de résoudre ce problème:
init
approprié (pas une fonction privée telle que vous l'avez déclarée)lateinit
)Ces 3 options ne sont pas équivalentes et, selon votre code, les deux premières peuvent être plus appropriées que la troisième.
lateinit
fera planter votre application si vous accédez aux variables avant qu'elles ne soient réellement initialisées.
Les blocs init
ne sont pas des fonctions, il suffit de supprimer la partie private fun
et les parenthèses:
internal var background: Drawable
internal var xMark: Drawable
init {
background = ColorDrawable(Color.RED)
xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete)
}
Vous avez besoin du mot clé lateinit
. Vérifiez la documentation .