Wie definieren Sie eine statische Erweiterungsmethode in Kotlin? Ist das überhaupt möglich? Ich habe derzeit eine Erweiterungsmethode wie unten gezeigt.
public fun Uber.doMagic(context: Context) {
// ...
}
Die obige Erweiterung kann für eine Instanz aufgerufen werden.
uberInstance.doMagic(context) // Instance method
aber wie mache ich es statische Methode wie unten gezeigt.
Uber.doMagic(context) // Static or class method
static-methods
kotlin
Ragunath Jawahar
quelle
quelle
Antworten:
Um dies zu erreichen
Uber.doMagic(context)
, können Sie eine Erweiterung in das Begleitobjekt von schreibenUber
(die Deklaration des Begleitobjekts ist erforderlich):quelle
Dies ist, was die offizielle Dokumentation sagt:
Kotlin statische Methoden
quelle
Ich hatte genau diese Frage vor 30 Minuten, also fing ich an zu graben und konnte keine Lösung oder Problemumgehung dafür finden, ABER während der Suche fand ich diesen Abschnitt auf der Kotlinglang-Website, der besagt:
Also hatte ich die verrückteste Idee aller Zeiten, warum nicht eine Erweiterungsfunktion mit einem nullbaren Empfänger definieren (ohne diesen Empfänger tatsächlich zu verwenden) und sie dann für ein Nullobjekt aufrufen! Also habe ich das versucht und es hat ziemlich gut funktioniert, aber es sah so hässlich aus. Es war so:
Also habe ich das umgangen, indem ich in meiner Erweiterungsdatei vom Empfängertyp einen Wert mit dem Wert null erstellt und ihn dann in meiner anderen Klasse verwendet habe. Als Beispiel habe ich hier eine "statische" Erweiterungsfunktion für die
Navigation
Klasse in Android implementiert : In meiner NavigationExtensions.kt-Datei:In dem Code, der es verwendet:
Offensichtlich ist dies kein Klassenname, sondern nur eine Variable des Klassentyps, die einen Nullwert hat. Dies ist offensichtlich hässlich auf der Seite des Erweiterungsherstellers (weil sie die Variable erstellen müssen) und auf der Entwicklerseite (weil sie das
SType
Format anstelle des tatsächlichen Klassennamens verwenden müssen), aber es ist das nächste, das derzeit erreicht werden kann im Vergleich zu tatsächlichen statischen Funktionen. Hoffentlich werden die Kotlin-Sprachhersteller auf das erstellte Problem reagieren und diese Funktion in die Sprache aufnehmen.quelle
Sie können eine statische Methode erstellen, indem Sie das Companion-Objekt wie folgt verwenden:
und dann kann man es so nennen:
quelle
platformStatic
Anmerkung verwenden.platformStatic
wurdeJvmStatic
im aktuellen Kotlin umbenannt.Wir empfehlen Ihnen, sich diesen Link anzusehen . Wie Sie dort sehen können, sollten Sie die Methode nur auf der obersten Ebene des Pakets (der Datei) deklarieren:
Dies ist gleich
Bei Konstanten ist alles gleich. Diese Erklärung
entspricht
quelle
Ich mag es auch sehr, die Möglichkeit zu haben, statische Erweiterungsmethoden in Kotlin hinzuzufügen. Um dies zu umgehen, füge ich die Erweiterungsmethode mehreren Klassen hinzu, anstatt in allen eine statische Erweiterungsmethode zu verwenden.
quelle
Activity.isDeviceOnline(...)
ohne eine Instanz von zu habenActivity
.Um eine Erweiterungsmethode in Kotlin zu erstellen, müssen Sie eine Kotlin-Datei (keine Klasse) erstellen und dann Ihre Methode in der Datei deklarieren. ZB:
Importieren Sie die Funktion in die Klasse oder Datei, an der Sie arbeiten, und verwenden Sie sie.
quelle