網站首頁 編程語言 正文
1.擴展函數
1)當我們沒法接觸某個類的定義,或者某個類沒有用open修飾無法繼承時,我們可以通過擴展函數,來實現該類功能的擴展。擴展函數,可以擴展自定義類、String類以及kotlin標準庫中的其他類。
2)定義擴展函數和定義一般函數差不多。唯一的不同就是,定義擴展函數時,除了函數定義外,還需指定給哪個類進行擴展。如:fun String.addExtention() = "Kotlin: ".plus(this) 這個就是給String類進行的功能擴展。
3)除了擴展函數外,還可以擴展屬性。擴展屬性和定義屬性差不多,但是需要指定要擴展屬性的類。也就是擴展屬性功能的接收者。
val String.aCount
get() = count { "a".contains(it) }
4)我們還可以定義泛型類的擴展函數,來使擴展函數的功能更加強大。
//擴展String類的函數
fun String.addExtention() = "Kotlin: ".plus(this)
fun String.easyPrint() = println(this)
//擴展自定義類的函數
fun Apple.name() ="apple name "+this.name
//擴展泛型函數
fun <T> T.easyPrintln() {
println(this)
}
//擴展屬性計算字符串"a"的個數
val String.aCount
get() = count { "a".contains(it) }
fun main() {
val name = "HanMei"
name.addExtention().easyPrint()
val apple = Apple("apple")
apple.name
apple.easyPrintln()
println(name.aCount)
}
2.infix 關鍵字
用于定義單個參數的擴展函數。比如 to函數。
如果一個函數定義使用了infix關鍵字,那么調用這個函數時,調用者和函數直接的 "."和參數的一對括號,都可以省略。
這個to就是一個函數
val map = mapOf<Int,String>(1 to "hanmei")
public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
可以看到to是一個泛型擴展函數。泛型<A,B> 調用者是A參數是B,返回值是Pair<A, B>
Pair(this, that) 這個就是函數定義,this代碼函數調用者A,that 就是B
3.擴展函數文件
如果擴展函數需要在多個文件中使用,可以把這些擴展函數單獨定義在一個文件中,然后import后使用。
擴展函數定義
package com.example.kotlin.gerneric
//擴展String類的函數
public fun String.addExtention() = "Kotlin: ".plus(this)
擴展函數的使用
import com.example.kotlin.gerneric.addExtention
fun main() {
val name = "HanMei".addExtention()
}
4.重命名擴展函數
如果想在使用時,想給擴展函數重寫取一個名字,可以用as
import com.example.kotlin.gerneric.addExtention as addEX
fun main() {
val name = "HanMei".addEX()
}
原文鏈接:https://blog.csdn.net/niuyongzhi/article/details/126667072
相關推薦
- 2022-11-03 C++模板超詳細介紹_C 語言
- 2022-10-27 C++設計模式中的工廠模式詳細介紹_C 語言
- 2022-06-20 go語言實現屏幕截圖的示例代碼_Golang
- 2022-07-14 Matlab實現灰色預測的示例代碼_C 語言
- 2022-08-07 API處理Android安全距離詳情_Android
- 2023-07-09 時間模式更改為:“剛剛“,“分鐘前“,“小時前“
- 2023-03-02 C++回溯算法之深度優先搜索詳細介紹_C 語言
- 2022-09-08 python?字典生成樹狀圖的實例_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支