Kotlin運算符重載函數(shù)及作用場景
在 Kotlin 里,運算符重載函數(shù)允許為自定義類型重新定義現(xiàn)有的運算符(如 + -…)行為,從而讓自定義類型能像內(nèi)置類型那樣使用運算符
基本語法
若要重載運算符,需要定義一個帶有 operator 修飾符的函數(shù)。函數(shù)名必須是 Kotlin 預定義的運算符對應的函數(shù)名?;菊Z法如下:
class YourClass {
operator fun XXX(parameters): ReturnType {
// 函數(shù)體
}
}作用場景
類對象
比如為我們的自定義類型添加加法運算
如下圖所示:+對應的函數(shù)名是plus,+=對應的函數(shù)名是 plusAssign

class Student(val name: String, val age: Int) {
//注意,二元運算符必須帶一個形參,表示右側(cè)的操作數(shù)
operator fun plus(another: Student): Student {
return Student(this.name + another.name, this.age+another.age)
}
}
fun main() {
val stu1 = Student("海賊王 ", 2)
val stu2 = Student("我當定了", 4)
val result = stu1 + stu2
println("(${result.name}, ${result.age})")
}
在這個例子中,Student類重載了 + 運算符,實現(xiàn)了兩個 Student對象的相加。stu1 + stu2相當于stu1.plus(stu2)
接下來舉一個重載一元運算符的例子,比如取反運算符:
class Student(val name: String, val age: Int) {
operator fun not(): Student {
return Student(name.reversed(), age)
}
}
fun main() {
val stu1 = Student("海賊王", 2)
val stu2 = !stu1
println("(${stu2.name}, ${stu2.age})")
}
!stu1相當于stu1.not()
數(shù)據(jù)類型
盡管基本數(shù)據(jù)類型(如 Int、Double 等)的內(nèi)置運算符已有默認行為,但可以為它們的擴展類型定義新的運算符行為。
// 為 Int 類型的擴展類重載 * 運算符
class Multiplier(val value: Int) {
operator fun times(other: Int): Int {
return this.value * other
}
}
fun main() {
val multiplier = Multiplier(5)
val result = multiplier * 3
println(result)
}在上述代碼中,為 Multiplier 類重載了 * 運算符,讓 Multiplier 對象可以和 Int 類型的數(shù)據(jù)進行乘法運算。
接口
如果一個類實現(xiàn)了特定的接口,并且接口中定義了運算符重載函數(shù),那么該類對象也能使用這些重載的運算符。
interface Addable<T> {
operator fun plus(other: T): T
}
class ComplexNumber(val real: Double, val imaginary: Double) : Addable<ComplexNumber> {
override operator fun plus(other: ComplexNumber): ComplexNumber {
return ComplexNumber(this.real + other.real, this.imaginary + other.imaginary)
}
}
fun main() {
val c1 = ComplexNumber(1.0, 2.0)
val c2 = ComplexNumber(3.0, 4.0)
val result = c1 + c2
println("(${result.real}, ${result.imaginary})")
}在這個例子中,ComplexNumber 類實現(xiàn)了 Addable 接口,并重載了 + 運算符,使得 ComplexNumber 對象可以使用 + 進行相加操作。
注意事項
- 運算符選擇:只能重載 Kotlin 預定義的運算符,不能創(chuàng)建新的運算符。
- 函數(shù)簽名:運算符重載函數(shù)的參數(shù)和返回值類型需要根據(jù)具體的運算符和業(yè)務需求來確定。
- 遵循約定:重載運算符時,應盡量遵循該運算符在數(shù)學或邏輯上的常規(guī)語義,避免造成混淆。
到此這篇關于Kotlin-運算符重載函數(shù)的文章就介紹到這了,更多相關Kotlin運算符重載函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在Android Studio中修改Android版本的兩種主流方法
在 Android 開發(fā)的日常迭代中,我們經(jīng)常需要升級或降級項目的 minSdkVersion、targetSdkVersion 與 compileSdkVersion,本文將手把手演示在 Android Studio 里修改 Android 版本的兩種主流做法,并給出易踩的坑與最佳實踐,需要的朋友可以參考下2025-07-07
Android開發(fā)實現(xiàn)TextView顯示豐富的文本
這篇文章主要介紹了Android開發(fā)實現(xiàn)TextView顯示豐富的文本,涉及Android中TextView的使用技巧,需要的朋友可以參考下2015-12-12
Android編程實現(xiàn)切換imageView的方法分析
這篇文章主要介紹了Android編程實現(xiàn)切換imageView的方法,結合具體實例形式分析了切換imageView的相關設置技巧與注意事項,需要的朋友可以參考下2017-09-09
Android 中okhttp自定義Interceptor(緩存攔截器)
這篇文章主要介紹了Android 中okhttp自定義Interceptor(緩存攔截器)的相關資料,需要的朋友可以參考下2017-03-03
Kotlin HttpURLConnection與服務器交互實現(xiàn)方法詳解
簡單來說,HttpURLConnection 是發(fā)起HTTP請求的基礎類庫,提供了HTTP請求的基本功能,不過封裝的比較少,在使用時很多內(nèi)容都需要自己設置,也需要自己處理請求流和響應流2022-09-09
深入理解與運行Android Jetpack組件之ViewModel
ViewModel是Android Jetpack組件之一,是一種用于管理UI相關數(shù)據(jù)的架構組件,它能夠幫助開發(fā)者實現(xiàn)優(yōu)雅的數(shù)據(jù)驅(qū)動和生命周期管理,本文將深入淺出地介紹ViewModel的使用和原理,帶你一步步掌握這個強大的組件2023-08-08

