Middle+
Wofür wird der Modifikator `crossinline` in Kotlin verwendet?
sobes.tech KI
Antwort von AI
Der Modifikator crossinline wird verwendet, um Lambda-Parameter von Inline-Funktionen zu kennzeichnen.
Er weist den Compiler an, dass die entsprechende Lambda-Funktion keinen nicht-lokalen Rückkehr (non-local return) durchführen kann, also das return-Statement verwenden, um die äußere Funktion zu verlassen. Die Lambda kann jedoch weiterhin an der Stelle des Aufrufs inline eingefügt werden (inlined).
Beispiel:
// Normale inline-Funktion mit nicht-lokaler Rückkehr
inline fun runTask(task: () -> Unit) {
task() // Nicht-lokale Rückkehr aus task() ist möglich
println("Aufgabe beendet")
}
// inline-Funktion mit crossinline-Parameter
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally-Block als Beispiel, bei dem crossinline benötigt wird
try {
task() // Nicht-lokale Rückkehr aus task() ist NICHT erlaubt
} finally {
println("Aufräumen")
}
println("Sichere Aufgabe beendet")
}
fun main() {
// Verwendung von runTask
runTask {
println("Innerhalb der runTask-Lambda")
return // ERLAUBT: nicht-lokale Rückkehr aus main()
}
// Der Druck "Aufgabe beendet" wird NICHT ausgeführt
// Verwendung von runSafeTask
runSafeTask {
println("Innerhalb der runSafeTask-Lambda")
// return // KOMPILIERFEHLER: nicht-lokale Rückkehr verboten
}
println("Nach der sicheren Aufgabe") // Dieser Druck wird ausgeführt
}
Wann ist das nützlich:
- Wenn garantiert werden soll, dass der Code nach dem Aufruf der
crossinline-Lambda ausgeführt wird (z.B. intry-finally-Blöcken). - Wenn die Lambda als Argument an eine andere Funktion übergeben wird, die möglicherweise nicht inline ist, und man eine nicht-lokale Rückkehr verhindern möchte, die den Ablauf stören könnte.