face à un problème inattendu. Voici une classe simple: de cette façon je appelais méthode startPrint: p> dans logcat je vois: p> I/WhereIsContent?: prepare sale: 5
I/WhereIsContent?: prepare saleContent: 3
I/WhereIsContent?: start sale: 5
I/WhereIsContent?: start saleContent: 0
4 Réponses :
Vente de déménagement et salecontent au-dessus de l'init, les propriétés doivent être au même titre p>
Le code correct serait bien dans cette réponse, sinon: (une des) la réponse correcte (s)
Lorsque vous initiez l'arrayliste globalement, il faudra une arraylist global pour la méthode. P>
Si vous le modifiez comme ceci, cela fonctionnera comme vous le souhaitez. P>
xxx pré> sortie: p> blockQuote>
xxx pré> blockquote>
Je pense que faire un membre nullable quand il peut être évité n'est pas la voie à suivre ... mais je ne vais pas descendre cela parce que cela semble fonctionner.
Ensuite, vous pouvez utiliser la fierté ou @jaime répondit
Vous pouvez faire je devais utiliser Cependant, le résultat de p> est p> Ça marche évidemment manière, mais cela fait aussi le chemin @jaime répondit. P> p> salecontent code> A
barinit var code>, mais vous devez supprimer l'initialisation directe pour cela. Voir cet exemple:
println () code> au lieu de
log code> parce que j'ai écrit cela dans le terrain de jeu de Kotlin sans logcat sans logcat ... p>
Je sais que les réponses ci-dessus fournissent un résultat correct. Mais je veux juste donner un peu une explication.
1) commence par P>
var sale: int? = null p> BlockQuote>
Si le bloc Init vient avant la déclaration de propriétés, Init Block prend simplement ses noms de propriété non attribués à ceux-ci (même si c'était Var Vente: int? = 4, il ignore 4). Il leur attribue des valeurs par défaut, dans votre cas null, em> strong> mais cette null n'est pas celle que vous avez attribuée, il est par défaut null de la propriété nullable. Donc, si c'était Var Vente: INT = 4, valeur de la vente dans init strong> Block serait 0 (valeur par défaut de INT). Ensuite, vous avez attribué 5 à Vente forte>. Après les finitions de bloc d'une init, Vente Strong> est cochée. Si la valeur par défaut a été attribuée à cette propriété (dans votre cas null), il ignore simplement l'assentiment (laissant avec sa valeur actuelle de 5), sinon elle réaffie à nouveau la propriété (donc si elle était Var Vente: int? = 4, Il serait de nouveau le réaffecter à 4) p>
mais, si init vient après la déclaration de propriété, tout devrait être clair et comme prévu;). p>
2) permet de tourner à p>
Var Var privé Salecontent: ArrayList = ArrayList () P> BlockQuote>
Dans ce cas, le nom de la propriété de Salecontent est pris (pas ArrayList ()) et, car aucune valeur par défaut pour cela, rien n'est assigné. À l'intérieur de l'init, vous avez attribué (1, 2, 3) qui a changé sa valeur de non attribuée à (1,2,3). Mais, lorsque le bloc d'init est terminé, il a été réaffecté à (ArrayList ()) car ArrayList () n'est pas une valeur par défaut de l'arrayliste. p>
mais si vous mettez des propriétés ci-dessus init, cela fonctionne comme d'habitude. p>
xxx pré> Si vous jouez avec ces valeurs, j'espère que vous aurez plus de compréhension. p>
mais en général, je suggérerais de mettre un bloc d'initial après la sécurité de la propriété. p> p>
mettre un bloc init après les propriétés
FAIRE
Salecontent CODE> A
LÉTILIT VAR CODE> et supprimez l'initialisation dans cette ligne:
Salecontent privé de la variété: Arraylist code>. Le code restant peut rester tel quel.