国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發 > 綜合 > 正文

kotlin代碼中!!操作符的清楚方法

2024-07-21 23:03:47
字體:
來源:轉載
供稿:網友

前言

空安全是Kotlin中非常實用的特性,它能夠讓你避免許多隱藏的NullPointerExceptions問題。然而當你使用AS將Java代碼轉換成Kotlin代碼后會出現很多的!! 操作符,因為出現!!意味著這里可能有未捕獲的KotlinNullPointerException異常。

對于一個有強迫癥的程序猿來說一個類中大篇幅的出現!! 絕對會使他們發瘋的。幸運的是我們可以通過以下方式避免使用!!操作符。

1. 使用val代替var

我們都知道val修飾的變量是只讀的,var修飾的變量是可變的,所以我們應該盡可能多的使用val,因為使用val修飾的變量必須有一個value,這樣你就不用再擔心空指針的問題,所以如果你能確定一個變量可以定義成一個常量,那么請用val修飾它。

2. 使用lateinit

然而你并不能把所有的變量用val修飾,,比如那些需要在Activity的onCreate()中進行初始換的變量,針對這個情況你可以考慮使用lateinit修飾變量,例如下面的代碼

private var mAdapter: RecyclerAdapter<Transaction>? = nulloverride fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mAdapter = RecyclerAdapter(R.layout.item_transaction)}fun updateTransactions() { mAdapter!!.notifyDataSetChanged()}

把mAdapter使用lateinit修飾后代碼變成這樣

private lateinit var mAdapter: RecyclerAdapter<Transaction>override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mAdapter = RecyclerAdapter(R.layout.item_transaction)}fun updateTransactions() { mAdapter.notifyDataSetChanged()}

需要注意的是如果訪問一個還沒有初始化的變量或屬性將會導致UninitializedPropertyAccessException異常。

還有一點需要注意的是lateinit并不能修飾基本數據類型的變量或屬性,比如Int,Boolean等等,它會提示你

‘lateinit'modifier is nor allowed on properites of primitive types

此時你可以使用下面這個方式

private var mNumber: Int by Delegates.notNull<Int>()

3. 使用let函數

下面這段代碼的提示我們經常會見到

kotlin,kotlin代碼,操作符

studio提醒我們mPhotoUrl的value在執行uploadPhoto時可能已經改變,不能確定是否非空,通常我們的解決方式是這樣的

private var mPhotoUrl: String? = nullfun uploadClicked() { if (mPhotoUrl != null) { uploadPhoto(mPhotoUrl!!) }}

然而如果你不想使用!! 這里還有一種更優雅的方式

private var mPhotoUrl: String? = nullfun uploadClicked() { mPhotoUrl?.let { uploadPhoto(it) }}

只有當mPhotoUrl不為空時let中的代碼才會執行

如果你對let函數還不了解,可以看我寫的這篇文章

4. 使用特定的函數處理復雜的場景

對于一些簡單的場景let函數是很好用的,就像上面的情況,但是對于一些復雜的場景,比如下面的代碼

if (mUserName != null && mPhotoUrl != null) { uploadPhoto(mUserName!!, mPhotoUrl!!)}

當然你也可以使用let的方式處理,但是這樣代碼的可讀性就會降低了,這時候你可以定義一些特定的函數來解決這個問題。

比如下面這個可以判斷兩個參數非空的函數

fun <T1, T2> ifNotNull(value1: T1?, value2: T2?, bothNotNull: (T1, T2) -> (Unit)) { if (value1 != null && value2 != null) { bothNotNull(value1, value2) }}

這樣你的代碼就變成了下面這樣

ifNotNull(mUserName, mPhotoUrl) { userName, photoUrl -> uploadPhoto(userName, photoUrl)}

See,!!操作符消失了。

5. 使用Elvis操作符

對于那些必有返回的情況,Elvis非常的實用。

Elvis操作符,?:左邊的返回值不為空則返回,否則返回?:右邊的值

fun getUserName(): String { if (mUserName != null) { return mUserName!! } else { return "Anonymous" }}

使用Elvis操作符后

fun getUserName(): String { return mUserName ?: "Anonymous"}

通過上面這幾種辦法基本上你可以清除程序中所有的!!操作符了,而且你的代碼也會變得更加健壯。如果你還有其他的方式請在評論區留言吧。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产网站av| 国产小视频在线| 国产成人精品综合网站| 天天操人人干| 尤物在线网址| 精品久久久久一区二区三区| 精品国产高清自在线一区二区三区 | 丁香视频五月| 九九热视频精品在线观看| 久久99亚洲网美利坚合众国 | eeuss影院在线观看| а√天堂8资源在线官网| 国产中文字幕在线观看| 国产黄色一级电影| 超碰97国产精品人人cao| 国产麻豆精品视频一区二区| 国产精品久久久久一区二区国产| 在线天堂av| 日本调教视频在线观看| 国产精品入口麻豆免费观看| 在线中文av| 超碰在线网址| 精品街拍一区二区| 99热在线观看免费| 日本a级黄色| av小说在线| 国产精品jvid在线观看| 九九在线免费视频| 欧美日韩视频精品二区| 99热免费观看| 国产偷激情在线| 亚洲社区在线| 国产黄色免费| 99视频资源网| 国产精品作爱| 国产美女被遭强高潮免费网站| 亚洲精品手机在线| 精品伦理一区二区| 国产福利免费观看| 国产精品黄页网站在线播放免费| 国产嫩草在线视频| 大香伊人久久| 国产亚av手机在线观看| 天天操天天射天天插| 九色福利视频| 国产九九九九| 国产视频青青| 国产91在线视频蝌蚪| 国产日产一区二区| 国产大学生粉嫩无套流白浆| 国产成人夜间影院在线观看| 国产精品视频一区二区久久| 国产日本韩国在线播放| 国产黄色在线播放| 伊人影院蕉久影院在线播放| 色中文字幕在线| 九色在线网站| 国产二区视频| 日本国产在线| 国产麻豆高清视频在线第一页| 国产美女性感在线观看懂色av| 国产亚洲精品午夜高清影院| 91蜜桃在线视频| 亚洲人av在线| 最近久乱中文字幕| 亚洲精品一线| 中文字幕日本在线观看| 亚洲一区免费在线| 午夜伦全在线观看| gogo高清在线播放免费| 天天爱天天做色综合| 精品亚洲综合| 狠狠狠狠狠狠操| 在线观看午夜av| 国产人成在线视频| 国产在线更新| av福利在线| 中文字幕不卡免费视频| 中文在线视频| 中文字幕在线播放网址| 久久99精品久久久久久野外| 精品成人一区二区三区免费视频| www.eeuss影院| 国产视频精品久久| 超碰免费在线播放| 色综合久久五月天| 2021av在线| 国产天堂资源| 午夜av在线免费观看| 青青青国产视频| av亚洲男人天堂| 99精品老司机免费视频| 国产亚洲精品久久久久久移动网络| 精品国产二区三区| 国产精品福利视频一区二区三区| 国自产拍在线网站网址视频| 青青草原av在线| 青草视频在线播放| www.五月色.com| 青青草在线免费观看| 性网站在线看| baoyu777.永久免费视频| av二区三区| 四虎精品视频| 欧美日韩**字幕一区| 日本啊v在线| 玖玖在线视频| 91超碰国产在线| 国产麻豆视频网站| 天堂中文字幕在线| 国产一区二区三区不卡免费观看 | 国产乱人视频免费播放| 高潮毛片在线观看| 国内自拍视频在线观看| 国产嫩草在线视频| 国产精品久久久久久久牛牛| 精品一二三四| 美女永久在线网站| 国产三级自拍| 亚洲91av| 福利在线视频导航| 国产图片综合| 精品卡一卡卡2卡3网站| 日本在线视频www鲁啊鲁| 国产在线超碰| 69久久久久| 青青草观看免费视频在线| 黄污在线观看| 精品国语对白精品自拍视| wwww亚洲| 2018中文字幕在线观看| 免费黄网站在线观看| 国产丝袜在线| a视频在线看| 国产人成在线视频| 久久91精品视频| 国产色a在线观看| 午夜亚洲成人| 国产第一页在线视频| 九色在线网站| 天天插天天操| 91高清国产| 国产极品视频| 自拍av在线| 人人澡人人爽| 永久av在线| 国产激情视频网址| 丁香婷婷在线| 久久精品亚洲7777影院| 天天插天天操| 在线国产1区| 国产高清视频在线观看| 国产中文字幕在线播放| www.av在线| 天天插天天干| 日本卡一卡2卡3卡4精品卡网站| 国产精品jvid在线观看| 久久久久久91精品色婷婷 | 国产人成在线视频| 福利资源在线久| 福利在线观看| 丁香花高清在线观看完整版| 久草视频国产| 国产毛片毛片毛片| √天堂8资源中文在线| 国产原创在线播放| 丁香花视频在线观看| 欧美色欧美亚洲另类二区精品| 在线观看午夜av| а天堂8中文最新版在线官网| sm国产在线调教视频| 久久综合第一页| 国产三区在线观看| 2019中文字幕在线电影免费| 在线播放www| 亚洲成人av在线影院| 超碰免费在线播放| 国产网站免费观看| 中文岛国精品亚洲一区| 男人天堂亚洲| 天堂资源最新在线| 精品一二三四| 超碰在线观看免费版| 国产三级在线| 欧洲一区av| 国产馆av播放| 亚洲欧美自拍另类| 成年人在线观看| 国产精品18久久久久网站| 亚洲精品在线视频免费| 国产69久久| av中文网站| 国产三级在线看| а√最新版地址在线天堂| 自拍亚洲国产| 影音av资源站| 国产偷倩在线播放| 黄色片免费在线| www操操操| 99色在线观看|