0
votes

Kotlin Array n'enregistre pas la valeur après l'initiation

face à un problème inattendu. Voici une classe simple: xxx pré>

de cette façon je appelais méthode startPrint: p> xxx pré>

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


2 commentaires

mettre un bloc init après les propriétés


FAIRE Salecontent A LÉTILIT VAR et supprimez l'initialisation dans cette ligne: Salecontent privé de la variété: Arraylist . Le code restant peut rester tel quel.


4 Réponses :


3
votes

Vente de déménagement et salecontent au-dessus de l'init, les propriétés doivent être au même titre


1 commentaires

Le code correct serait bien dans cette réponse, sinon: (une des) la réponse correcte (s)



0
votes

Lorsque vous initiez l'arrayliste globalement, il faudra une arraylist global pour la méthode.

Si vous le modifiez comme ceci, cela fonctionnera comme vous le souhaitez. xxx

sortie: xxx


2 commentaires

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



0
votes

Vous pouvez faire salecontent A barinit var , mais vous devez supprimer l'initialisation directe pour cela. Voir cet exemple: xxx

je devais utiliser println () au lieu de log parce que j'ai écrit cela dans le terrain de jeu de Kotlin sans logcat sans logcat ...

Cependant, le résultat de xxx

est xxx

Ça marche évidemment manière, mais cela fait aussi le chemin @jaime répondit.


0 commentaires

0
votes

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

var sale: int? = null

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, 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 Block serait 0 (valeur par défaut de INT). Ensuite, vous avez attribué 5 à Vente . Après les finitions de bloc d'une init, Vente 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)

mais, si init vient après la déclaration de propriété, tout devrait être clair et comme prévu;).

2) permet de tourner à

Var Var privé Salecontent: ArrayList = ArrayList ()

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.

mais si vous mettez des propriétés ci-dessus init, cela fonctionne comme d'habitude. xxx

Si vous jouez avec ces valeurs, j'espère que vous aurez plus de compréhension.

mais en général, je suggérerais de mettre un bloc d'initial après la sécurité de la propriété.


0 commentaires