Android Kotlin: Bitte dringend um Hilfe

mrkennedie89

Mitglied
Hallo zusammen,

ich hoffe mir kann jemand bei einem Problem in Kotlin weiterhelfen. Ich sitze schon den ganzen Tag daran und komme gedanklich einfach nicht mehr weiter.
Es geht um das Thema Flows, genauer gesagt um die FlowBuilder-Funktion flow( )
Hier der link zur Funktion: Flow Funktion

Java:
fun <T> flow(block: suspend FlowCollector<T>.() -> Unit): Flow<T>

Anwendungsbeispiel:

Code:
fun myFlow(): Flow<Int> = flow { //this: FlowCollector<Int>

        for (i in 1..10) {
            emit(i)
        }

    }

Was ich an der ganzen Sache einfach nicht verstehe, ist wie beim Aufruf der Funktion das Referenzobjekt vom Interface FlowCollector gebildet wird. In der Source sehe ich nirgendwo eine Objektbildung vom Interface und angeblich wird auch kein anonymes Objekt gebildet. Aber dennoch wird mir vom Compiler this: FlowCollector<Int> angezeigt.
Vielleicht darf ich kurz mein bisheriges Wissen dazu zusammenfassen um mögliche Fehlerquellen in meiner Denkweise aufzuzeigen:

Die Funktion flow ist eine High-Order-Function die einen generischen Typ<T> akzeptiert und als Rückgabewert ein Objekt vom Typ Flow<T> liefert. Als Übergabeparameter der Funktion flow( ) dient eine Extension-Function des
Interfaces FlowCollector, ohne Übergabeparameter und ohne Rückgabewert. block: ist der beliebig gewählte Bezeichner für das gerade beschriebene Funktionsliteral.

Beim Aufruf von flow( ) wird der Parameter als Lambda-Ausdruck übergeben, da flow als High-Order-Function nur eine Funktion als Parameter besitzt. this: zeigt implizit auf das ReferenzObjekt. Und nun bin ich mir irgendwie dennoch auch unsicher, ist jetzt der Inhalt im Lambda-Ausdruck die anonyme Extension-Function für das Interface FlowCollector? oder wird hier "underTheHood" eine andere ExtensionFunction von FlowCollector verwendet?

Ich hoffe mir kann jemand weiterhelfen. Vielen Dank.
 

Jw456

Top Contributor
fun <T> flow(block: suspend FlowCollector<T>.() -> Unit): Flow<T>
Für mich ist das kein Lambda ,sondern ein Funktionstyp bei denen Parametertypen vom Ergebnistyp getrennt werden.
Für ein Lambda fehlen mir die geschweiften Klammern.

Der Pfeil bedeutet in Kotlin nicht immer Lambda.

 
Zuletzt bearbeitet:

Neue Themen


Oben