Überladen des Kotlin-Operators (mit Beispielen)

Inhaltsverzeichnis

In diesem Artikel erfahren Sie anhand von Beispielen, wie Operatoren überladen werden (definieren Sie, wie Operatoren für benutzerdefinierte Typen wie Objekte funktionieren).

Wenn Sie den Operator in Kotlin verwenden, wird die entsprechende Elementfunktion aufgerufen. Zum Beispiel a+bverwandelt sich a.plus(b)der Ausdruck in unter der Haube.

 fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 fünfzehn

Tatsächlich ist die plus()Funktion überlastet, um mit verschiedenen Kotlin-Grundtypen und zu arbeiten String.

 // + Operator für Grundtypen Operator Spaß plus (andere: Byte): Int Operator Spaß plus (andere: Kurz): Int Operator Spaß plus (andere: Int): Int Operator Spaß plus (andere: Lang): Langer Operator Spaß plus (other: Float): Float-Operator fun plus (other: Double): Double // für String-Verkettungsoperator fun String? .plus (other: Any?): String 

Sie können auch definieren, wie der Operator für Objekte funktioniert, indem Sie die entsprechende Funktion überladen. Beispielsweise müssen Sie definieren, wie der +Operator für Objekte plus()funktioniert, indem Sie die Funktion überladen .

Beispiel: Überladen + Operator

 fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) : Point ( return Point(x + p.x, y + p.y) ) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Summe = (5, 1)

Hier ist die plus()Funktion mit einem operatorSchlüsselwort gekennzeichnet, um dem Compiler mitzuteilen, dass der +Operator überladen ist.

Der Ausdruck p1 + p2verwandelt sich p1.plus(p2)unter die Haube.

Beispiel: - Überlastung des Bedieners

In diesem Beispiel lernen Sie, den --Operator zu überladen . Der Ausdruck --averwandelt sich a.dec()unter die Haube.

Die dec()Member-Funktion akzeptiert keine Argumente.

 fun main(args: Array) ( var point = Point(3, -8) --point println("point = ($(point.x), $(point.y))") ) class Point(var x: Int = 0, var y: Int = 10) ( operator fun dec() = Point(--x, --y) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Punkt = (2, -9) 

Erinnere dich daran,

 Operator Spaß dec () = Punkt (- x, --y)

ist äquivalent zu

 Operator Spaß dec (): Punkt (Rückgabepunkt (- x, --y))

Einige wichtige Punkte

1. Wenn Sie Operatoren überladen, sollten Sie versuchen, den ursprünglichen Geist des Operators beizubehalten. Beispielsweise,

 fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) = Point(x - p.x, y - p.y) )

Obwohl das obige Programm technisch korrekt ist, haben wir den +Operator verwendet , um die entsprechenden Eigenschaften von zwei Objekten zu subtrahieren, was das Programm verwirrend machte.

2. Im Gegensatz zu Sprachen wie Scala kann in Kotlin nur eine bestimmte Gruppe von Operatoren überladen werden. Besuchen Sie die Seite, um mehr über Operatoren zu erfahren, die in Kotlin überladen werden können, sowie über die entsprechenden Mitgliedsfunktionen.

Interessante Beiträge...