I denne artikkelen vil du lære om operatøroverbelastning (definere hvordan operatør fungerer for brukerdefinerte typer som objekter) ved hjelp av eksempler.
Når du bruker operator i Kotlin, kalles den tilsvarende medlemsfunksjonen. For eksempel a+b
forvandles uttrykk til a.plus(b)
under panseret.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
Når du kjører programmet, vil utdataene være:
15
Faktisk er plus()
funksjonen overbelastet for å fungere med forskjellige Kotlin-basistyper og String
.
// + operator for grunnleggende typer operator moro pluss (annet: Byte): Int operator moro pluss (annet: Short): Int operator moro pluss (annet: Int): Int operator moro pluss (annet: Long): Long operator fun plus (annet: Float): Float operator fun plus (other: Double): Double // for string concatenation operator fun String? .plus (other: Any?): String
Du kan også definere hvordan operatøren jobber for objekter ved å overbelaste den tilhørende funksjonen. For eksempel må du definere hvordan +
operatøren jobber for objekter ved hjelp av overbelastningsfunksjon plus()
.
Eksempel: Overbelastning + operatør
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) ) )
Når du kjører programmet, vil utdataene være:
sum = (5, 1)
Her er plus()
funksjonen merket med operator
nøkkelord for å fortelle kompilatoren at +
operatøren blir overbelastet.
Uttrykket p1 + p2
forvandles til p1.plus(p2)
under panseret.
Eksempel: - Overbelastning av operatør
I dette eksemplet vil du lære å overbelaste --
operatøren. Uttrykket --a
forvandles til a.dec()
under panseret.
Den dec()
medlemsfunksjon tar ikke noen argumenter.
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) )
Når du kjører programmet, vil utgangen være:
punkt = (2, -9)
Husk at,
operator fun dec () = Punkt (- x, --y)
tilsvarer
operator fun dec (): Point (returpunkt (- x, --y))
Få viktige poeng
1. Når du overbelaster operatører, bør du prøve å opprettholde operatørens opprinnelige ånd. For eksempel,
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) )
Selv om programmet ovenfor er teknisk riktig, har vi brukt +
operator for å trekke tilsvarende egenskaper til to objekter som gjorde programmet forvirrende.
2. I motsetning til språk som Scala, kan bare et bestemt sett med operatører overbelastes i Kotlin. Besøk siden for å lære om operatører som kan bli overbelastet i Kotlin og deres tilhørende medlemsfunksjoner.