Ebben a cikkben példák segítségével megismerheti az operátor túlterhelését (meghatározza, hogy az operátor hogyan működik a felhasználó által definiált típusokhoz, például objektumokhoz).
Amikor Kotlin operátort használ, a megfelelő tagfüggvényt hívják meg. Például a kifejezés a+b
átalakul a.plus(b)
a motorháztető alá.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
A program futtatásakor a kimenet a következő lesz:
15
Valójában a plus()
funkció túlterhelt, hogy különböző Kotlin alaptípusokkal és String
.
// + operátor az alaptípusokhoz operator fun plus (egyéb: Byte): Int operator fun plus (egyéb: Short): Int operator fun plus (egyéb: Int): Int operator fun plus (egyéb: Long): Long operator fun plus (egyéb: Float): Float operátor fun plus (egyéb: Double): Double // karakterlánc összefűzés operátor fun számára String? .plus (egyéb: Any?): String
Azt is meghatározhatja, hogy az operátor hogyan működik az objektumoknál, ha túlterheli a megfelelő funkciót. Például meg kell határoznia, hogy az +
operátor hogyan működik az objektumokon, a plus()
funkció túlterhelésével .
Példa: Túlterhelés + kezelő
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) ) )
A program futtatásakor a kimenet a következő lesz:
összeg = (5, 1)
Itt a plus()
függvényt operator
kulcsszóval jelölik, hogy a fordító megmondja, hogy az +
operátor túlterhelt.
A kifejezés p1 + p2
átalakul p1.plus(p2)
a motorháztető alá.
Példa: - A kezelő túlterhelése
Ebben a példában megtanulja az --
operátor túlterhelését . A kifejezés --a
átalakul a.dec()
a motorháztető alá.
A dec()
member függvény nem tartalmaz argumentumokat.
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) )
A program futtatásakor az ouput a következő lesz:
pont = (2, -9)
Emlékezz rá,
operátor fun dec () = Pont (- x, --y)
egyenértékű
operátor szórakoztató dec (): Pont (visszatérési pont (- x, --y))
Néhány fontos pont
1. Amikor túlterheli az operátorokat, meg kell próbálnia fenntartani az operátor eredeti szellemét. Például,
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) )
Bár a fenti program technikailag helytálló, az +
operátort használtuk két objektum megfelelő tulajdonságainak kivonására, ami zavarttá tette a programot.
2. Az olyan nyelvektől eltérően, mint a Scala, Kotlinban csak egy adott operátorkészlet terhelhető meg. Látogasson el az oldalra, hogy megismerje a Kotlinban túlterhelhető operátorokat és a hozzájuk tartozó tagfunkciókat.