So legen Sie die Eigenschaft kotlin Latetin auf null fest

9

Die folgende Klasse hat einen sehr einzigartigen Lebenszyklus, weshalb ich lateinit properties

vorübergehend auf Null setzen muss %Vor%

}     }

So wird es vom Framework verwendet.

%Vor%

Meine lateinit Eigenschaften werden von Dolch injiziert, und ich muss sie auf null in onDestroyView setzen - oder habe ein Speicherleck. Dies ist jedoch in Kotlin nicht möglich, soweit ich weiß (ohne Nachdenken). Ich könnte diese Eigenschaften nullable machen, aber das würde den Zweck von Kotlins Nullsicherheit besiegen.

Ich bin nicht ganz sicher, wie ich das lösen soll. Idealerweise könnte es einen Typ von Annotationsprozessor geben, der Java-Code generiert, um bestimmte Variablen automatisch in onDestroyView ? Aufzulösen?

    
ZakTaccardi 22.02.2017, 16:55
quelle

2 Antworten

7

Kotlin lateinit -Eigenschaften verwenden null als nicht initialisierten Flag-Wert, und es gibt keine saubere Möglichkeit, null im Hintergrundfeld einer lateinit -Eigenschaft ohne Reflektion festzulegen.

Mit Kotlin können Sie jedoch das Eigenschaftenverhalten mithilfe delegierter Eigenschaften überschreiben. Offenbar gibt es keinen Delegaten, der das in kotlin-stdlib erlaubt, aber wenn Sie genau dieses Verhalten benötigen, können Sie Implementieren Sie Ihren eigenen Delegierten , um dies zu tun, indem Sie Ihren Utilities Code hinzufügen:

%Vor%

Und die Verwendung:

%Vor%     
hotkey 22.02.2017 17:46
quelle
0

Ich denke, was Sie brauchen, ist eine normale gesunde nullable -Eigenschaft ohne die Madgia von lateinit :

%Vor%

Mit dieser Lösung wird der Compiler Sie fragen, ob viewBinder % null ist oder nicht, aber IMO ist es hier angebracht, da es an jedem Punkt Ihres Programms null werden kann.

    
voddan 22.02.2017 19:14
quelle