0
votes

Comment déclarer une valeur publique (VAL) dans une classe de Kotlin pour l'initialiser plus tard. Ne peut pas utiliser var dans ce cas particulier

J'essaie de créer une simple application de caméra sur Android à l'aide de Kotlin. Je ne suis pas capable de convertir du code Java en Kotlin. Comment puis-je déclarer cameradevice dans kotlin?

code Java: xxx

Code de kotlin: xxx

Je ne suis pas capable de le définir comme un var, il lance Seul (?.) ou des appels non nuls affirmés (!!) sont autorisés sur un récepteur nullable de type cameradevice? < / em> Et je ne suis pas capable de le déclarer dans la fonction, jette la même erreur.


2 commentaires

Utilisez var cameradevice: cameradevice? = null et l'utiliser comme cameradevice? .close () . Si vous utilisez VAL , vous ne pouvez pas le réaffecter comme cameradevice = caméra


Pouvez-vous expliquer pourquoi pas vous voulez le déclarer comme var ?


3 Réponses :


0
votes

cameradevice strong> peut être null à tout moment. Vous devrez donc affirmer NOT NULL afin d'exécuter votre code. Mais assurez-vous que CamerAdevice n'est jamais nulle ici. Ainsi, utilisez votre code comme ci-dessous

@Override
        public void onOpened(CameraDevice camera) {
            //This is called when the camera is open
            cameraDevice!! = camera;
            randomFunction();
        }


2 commentaires

Cela ne dit pas vraiment op comment l'initialiser où ils le déclarent


Vous manquez le val cameradevice: cameradevice? = null



0
votes

Lorsque vous faites ce xxx pré>

VAL code> La variable a besoin initial initialisation code> signifie que vous avez attribuer une valeur à la déclaration et après la initialisation code> de variable, vous ne pouvez pas modifier la valeur de celui-ci. p>

Si vous souhaitez initialiser tard, vous pouvez faire de cette façon P>

  lateinit var cameraDevice:CameraDevice  //this does not required initialization at initial level


1 commentaires

J'ai également pensé à liétinit , mais cela ne fonctionne que si la variable a été initialisée dans OnOpened . Si cela ne va que dans onerror , il va crancer.



2
votes

Vous devez utiliser barinit pour cameradevice comme ceci: xxx

si vous rencontrez des Onerror , Vous vérifiez si cameradevice a été initialisé et seulement ensuite appelez ferme () pour éviter d'obtenir un uninitialisépropertyaccessException . xxx


0 commentaires