Kotlin 嵌套函數(shù)開發(fā)技巧詳解
1.嵌套函數(shù)
業(yè)務(wù)開發(fā)中,我們可能會遇到這樣一個場景:一個函數(shù)只會被某一處多次調(diào)用,且不想讓這個函數(shù)在該類的其他地方調(diào)用,這個時候就需要對這個函數(shù)的訪問性進(jìn)行進(jìn)一步限制。
private是無法滿足的,這個時候我們就可以使用嵌套函數(shù)提供更好的封裝:
fun test1() {
//被限制訪問行的函數(shù)
fun test2(content: String) {
println(content)
}
test2("hahaha")
test2("babababa")
test2("uuuuuuu")
}
這時候,只有test1()能夠被訪問,test2()是無法被除了test1()外的其他地方進(jìn)行訪問的
不過這樣test2()方法體過大會導(dǎo)致test1()方法太長,所以嵌套函數(shù)要根據(jù)具體場景選擇性使用
2.@JvmOverloads快捷實(shí)現(xiàn)函數(shù)重載
Android自定義View時,一般需要定義三個構(gòu)造方法:
class CustomView : View {
constructor(context: Context) : super(context)
constructor(context: Context, attributes: AttributeSet? = null) : super(context, attributes)
constructor(context: Context, attributes: AttributeSet? = null, defStyleAttr: Int) : super(
context,
attributes,
defStyleAttr
)
}
每次自定義View都這樣寫過于麻煩,這個時候就可以借用@JvmOverloads實(shí)現(xiàn)運(yùn)算符重載:
class CustomView @JvmOverloads constructor(
context: Context,
attributes: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attributes, defStyleAttr) {
}
反編譯成java代碼看下:

可以看到,kotlin編輯器會自動幫助我們生成三個重載構(gòu)造方法。
PS:當(dāng)@JvmOverloads使用在基于已有的WebView、EditText等組件自定義View時,一定要注意第三個參數(shù)defStyleAttr默認(rèn)值時不一定為0的,需要根據(jù)繼承的父類組件填充正確的參數(shù)
3.延遲初始化lateinit var
日常開發(fā)中,我們會使用lateinit var實(shí)現(xiàn)屬性的延遲初始化:
lateinit var mContent: String mContent = "test test"
使用延遲初始化的屬性,當(dāng)我們不確定這個屬性有沒有被初始化,可以通過下面方式判斷:
//判斷mContent有沒有被初始化
if (this::mContent.isLateinit) {
Log.i("CustomView", "test: ")
}
4.@JvmField減少屬性set和get方法的生成
定義一個變量:
var mData: String = ""
反編寫成java代碼:

可以看到編譯器會自動幫助我們生成mData的set、get方法,如果不想要編譯幫助我們生成屬性的set、get方法,可以添加@JvmField注解:
@JvmField var mData: String = ""
反編譯成java代碼:

這樣系統(tǒng)就不會幫助我們生成get、set方法了,因?yàn)榫幾g器將mData的訪問修飾符改成了public
以上就是Kotlin 嵌套函數(shù)開發(fā)技巧詳解的詳細(xì)內(nèi)容,更多關(guān)于Kotlin 嵌套函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于android連續(xù)點(diǎn)擊出現(xiàn)多個Activity界面的解決方法
這篇文章主要介紹了關(guān)于android連續(xù)點(diǎn)擊出現(xiàn)多個Activity界面的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android自定義view實(shí)現(xiàn)輸入控件
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)輸入控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Android 使用SharePerference判斷是否為第一次登陸的實(shí)現(xiàn)代碼
很多app中在第一次安裝登陸時會有引導(dǎo)歡迎界面,第二次打開時就不再顯示引導(dǎo)頁面。這個怎么實(shí)現(xiàn)呢?下面小編給大家介紹下使用SharePerference判斷是否為第一次登陸的實(shí)現(xiàn)代碼,需要的的朋友參考下吧2017-03-03
android實(shí)現(xiàn)可拖動的浮動view
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)可拖動的浮動view,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Android實(shí)現(xiàn)郵箱驗(yàn)證功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)郵箱驗(yàn)證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05
Flutter之Timer實(shí)現(xiàn)短信驗(yàn)證碼獲取60s倒計時功能的代碼
這篇文章主要介紹了Flutter之Timer實(shí)現(xiàn)短信驗(yàn)證碼獲取60s倒計時功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Android開發(fā)中的Surface庫及用其制作播放器UI的例子
這篇文章主要介紹了Android開發(fā)中的Surface庫及用其制作播放器界面的例子,利用SurfaceView和SurfaceHolder可以高效地繪制和控制圖形界面,需要的朋友可以參考下2016-04-04
Android?studio實(shí)現(xiàn)app登錄界面
這篇文章主要為大家詳細(xì)介紹了Android?studio實(shí)現(xiàn)app登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04

