kotlin.UninitializedPropertyAccessException: lateinit property clientKeypair has not been initialized
Bytecode dit...blah blah...
public final static synthetic access$getClientKeypair$p(Lcom/takharsh/ecdh/MainActivity;)Ljava/security/KeyPair;
`L0
LINENUMBER 11 L0
ALOAD 0
GETFIELD com/takharsh/ecdh/MainActivity.clientKeypair : Ljava/security/KeyPair;
DUP
IFNONNULL L1
LDC "clientKeypair"
INVOKESTATIC kotlin/jvm/internal/Intrinsics.throwUninitializedPropertyAccessException (Ljava/lang/String;)V
L1
ARETURN
L LOCALVARIABLE $this Lcom/takharsh/ecdh/MainActivity ; L0 L2 0 MAXSTACK = 2 MAXLOCALS = 1
Kotlin crée une variable locale supplémentaire de la même instance et vérifie si elle est nulle ou non. Si elle est nulle, elle lance une exception de type "throwUninitializedPropertyAccessException", sinon elle renvoie l'objet local. Explication du bytecode ci-dessus aquí Solution Depuis kotlin 1.2, il est possible de vérifier si la variable lateinit a été initialisée ou non à l'aide de la fonction .isInitialized
3 votes
Ce qu'il vous faut peut-être, c'est rendre la propriété nullable (changer le type en
File?
) et vérifier si elle est nulle à la place ?1 votes
J'ai essayé et cela va fonctionner, mais je vais devoir modifier le fichier
allSeries
var toseriesDir?.listFiles()?.map { it.name }?.toTypedArray()
ce qui n'est pas très "joli"1 votes
Vous pouvez effectuer une simple vérification de la nullité et le smart cast rendra le tout plus joli.
if (seriesDir != null) {
allSeries = seriesDir.listFiles().map { it.name }.toTypedArray()
}
0 votes
Veuillez envisager d'accepter des informations plus récentes répondre