亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Kotlin 運(yùn)算符重載

在本文中,您將通過示例學(xué)習(xí)有關(guān)運(yùn)算符重載的內(nèi)容(定義運(yùn)算符如何為用戶定義的類型(如對象)工作)。

在Kotlin中使用operator時,將調(diào)用它的相應(yīng)成員函數(shù)。 例如,表達(dá)式a + b在后臺轉(zhuǎn)換為a.plus(b)。

fun main(args: Array<String>) {
    val a = 5
    val b = 10

    print(a.plus(b)) // print(a+b)
}

運(yùn)行該程序時,輸出為:

15

實(shí)際上,plus()函數(shù)被重載以處理各種Kotlin基本類型和String(字符串)。

// + 基本類型的運(yùn)算符
operator fun plus(other: Byte): Int
operator fun plus(other: Short): Int
operator fun plus(other: Int): Int
operator fun plus(other: Long): Long
operator fun plus(other: Float): Float
operator fun plus(other: Double): Double

//用于字符串連接
operator fun String?.plus(other: Any?): String

您還可以通過重載相應(yīng)的函數(shù)來定義運(yùn)算符對對象的工作方式。 例如,您需要通過重載plus()函數(shù)來定義+運(yùn)算符對對象的工作方式。

示例:重載+運(yùn)算符

fun main(args: Array<String>) {
    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) {

    //重載 plus 函數(shù)
    operator fun plus(p: Point) : Point {
        return Point(x + p.x, y + p.y)
    }
}

運(yùn)行該程序時,輸出為:

sum = (5, 1)

在此,plus()函數(shù)用 operator 關(guān)鍵字標(biāo)記,以告知編譯器 + 運(yùn)算符正在重載。

表達(dá)式 p1 + p2 在后臺轉(zhuǎn)換為 p1.plus(p2)。

示例:- 運(yùn)算符重載

在此示例中,您將學(xué)習(xí)重載 - 運(yùn)算符。表達(dá)式 --a 在后臺轉(zhuǎn)換為 a.dec()。

dec()成員函數(shù)不帶任何參數(shù)。

fun main(args: Array<String>) {
    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)
}

當(dāng)您運(yùn)行該程序時,輸出將是:

point = (2, -9)

請記住,

operator fun dec() = Point(--x, --y)

相當(dāng)于

operator fun dec(): Point {
    return Point(--x, --y)
}

注意幾個要點(diǎn)

1、重載運(yùn)算符時,應(yīng)嘗試保持運(yùn)算符的原始作用。例如,

fun main(args: Array<String>) {
    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) {

    //重載plus函數(shù)
    operator fun plus(p: Point) = Point(x - p.x, y - p.y)
}

盡管上面的程序在技術(shù)上是正確的,但我們使用 + 運(yùn)算符減去了兩個對象的相應(yīng)屬性,這使程序變得混亂。

2、與Scala之類的語言不同,Kotlin中只能重載一組特定的運(yùn)算符。