Kotlin 嵌套函數(shù)開發(fā)技巧詳解
1.嵌套函數(shù)
業(yè)務(wù)開發(fā)中,我們可能會遇到這樣一個場景:一個函數(shù)只會被某一處多次調(diào)用,且不想讓這個函數(shù)在該類的其他地方調(diào)用,這個時候就需要對這個函數(shù)的訪問性進行進一步限制。
private是無法滿足的,這個時候我們就可以使用嵌套函數(shù)提供更好的封裝:
fun test1() { //被限制訪問行的函數(shù) fun test2(content: String) { println(content) } test2("hahaha") test2("babababa") test2("uuuuuuu") }
這時候,只有test1()能夠被訪問,test2()是無法被除了test1()外的其他地方進行訪問的
不過這樣test2()方法體過大會導(dǎo)致test1()方法太長,所以嵌套函數(shù)要根據(jù)具體場景選擇性使用
2.@JvmOverloads快捷實現(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實現(xià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默認值時不一定為0的,需要根據(jù)繼承的父類組件填充正確的參數(shù)
3.延遲初始化lateinit var
日常開發(fā)中,我們會使用lateinit var實現(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方法了,因為編譯器將mData的訪問修飾符改成了public
以上就是Kotlin 嵌套函數(shù)開發(fā)技巧詳解的詳細內(nèi)容,更多關(guān)于Kotlin 嵌套函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于android連續(xù)點擊出現(xiàn)多個Activity界面的解決方法
這篇文章主要介紹了關(guān)于android連續(xù)點擊出現(xiàn)多個Activity界面的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android 使用SharePerference判斷是否為第一次登陸的實現(xiàn)代碼
很多app中在第一次安裝登陸時會有引導(dǎo)歡迎界面,第二次打開時就不再顯示引導(dǎo)頁面。這個怎么實現(xiàn)呢?下面小編給大家介紹下使用SharePerference判斷是否為第一次登陸的實現(xiàn)代碼,需要的的朋友參考下吧2017-03-03Flutter之Timer實現(xiàn)短信驗證碼獲取60s倒計時功能的代碼
這篇文章主要介紹了Flutter之Timer實現(xiàn)短信驗證碼獲取60s倒計時功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Android開發(fā)中的Surface庫及用其制作播放器UI的例子
這篇文章主要介紹了Android開發(fā)中的Surface庫及用其制作播放器界面的例子,利用SurfaceView和SurfaceHolder可以高效地繪制和控制圖形界面,需要的朋友可以參考下2016-04-04