Die folgende Klasse hat einen sehr einzigartigen Lebenszyklus, weshalb ich lateinit
properties
} }
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?
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:
Und die Verwendung:
%Vor% Ich denke, was Sie brauchen, ist eine normale gesunde nullable
-Eigenschaft ohne die Madgia von lateinit
:
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.
Tags und Links kotlin kotlin-null-safety conductor