Manchmal ist es gut, zweimal nachzudenken und sich nicht allein auf die statische Codeanalyse zu verlassen

Apr 19 2023
Importieren oder nicht importieren, das ist der Unterschied bei der Verwendung von TypedArrays
Das Android KTX bietet einige nette kleine Kotlin-Erweiterungsfunktionen für einige der Android-Framework-Typen. Eine dieser Funktionen ist TypedArray.
Foto von Javier Allegue Barros auf Unsplash

Das Android KTX bietet einige nette kleine Kotlin- Erweiterungsfunktionen für einige der Android- Framework-Typen. Eine dieser Funktionen ist TypedArray.use {}die, die 2018 eingeführt wurde und das Ergebnis des Blocks zurückgibt. Darüber hinaus wird dies TypedArrayautomatisch wiederverwendet, um die Kotlin- StdLib- Implementierung zu imitieren, die Closeable.use {}normalerweise anstelle der Java try-with-resources- Anweisung verwendet wird.

Einige Zeit später im Jahr 2021 mit Android 12 begann der TypedArrayTyp mit der Implementierung der CloseableSchnittstelle und stellte eine closeMethode als Alias ​​für die ursprüngliche recycleMethode bereit. Kann daher auf allen neuen Android-Closeable.use {} Plattformen verwendet werden und da es nicht importiert werden muss, wird es immer dann verwendet, wenn es nicht explizit importiert wird.TypedArray.use {}

Irgendwann im Jahr 2022, als alle meine Projekte bereits seit einiger Zeit ohne Probleme auf ein Android- API-Level von 31+ ausgerichtet und kompiliert wurden, gelang es mir, innerhalb weniger Tage TypedArray.use {}den Code von zwei verschiedenen Projekten zu verwenden. Da es einfach ist, nur drei Buchstaben und eine geschweifte Klammer einzugeben, habe ich nicht die Mühe gemacht, die automatische Vervollständigung zu verwenden, und habe daher die Android- KTX-Funktion nicht importiert . Der Linter beschwerte sich nicht und alle Tests waren erfolgreich. Nur beim Test mit einem „älteren“ Gerät brach alles auseinander und die Lösung war ein einfacher Import:

import androidx.core.content.res.use