Kotlin Operator túlterhelés (példákkal)

Tartalomjegyzék

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 operatorkulcsszó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.

érdekes cikkek...