Kotlin 初體驗(yàn)
Kotlin也是基于JVM設(shè)計(jì)的編程語(yǔ)言影暴,相對(duì)Java來(lái)說(shuō)续语,Kotlin在編寫(xiě)代碼時(shí)有如下優(yōu)勢(shì):代碼簡(jiǎn)潔高效、函數(shù)式編程引谜、空指針安全牍陌、支持lambda表達(dá)式、流式API等员咽。
kotlin配置
在android studio 3.0以前需要下載kotlin插件
新建一個(gè)項(xiàng)目毒涧,新建完成后,點(diǎn)擊code —> convert java file to kotlin file 一個(gè)kotlin項(xiàng)目完成贝室,如果已經(jīng)有項(xiàng)目契讲,需要引入kotlin
project build.gradle
buildscript {
ext.kotlin_version = '1.2.30'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
app build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin:'kotlin-android-extensions'
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
到此kotlin的配置就完成了,剩下的就是coding了
kotlin使用
簡(jiǎn)化findViewById
Android的架構(gòu)里滑频,xml布局文件和Activity是松耦合的捡偏,Activity中要使用界面元素,必須借助R文件對(duì)xml控件的記錄峡迷,用findViewById找到這個(gè)元素银伟。
在Kotlin中我們可繼續(xù)使用findViewById去綁定xml布局中的控件,kotlin還提供了一種更簡(jiǎn)潔的方法绘搞,app的gradle中引入
apply plugin:'kotlin-android-extensions'
直接使用xml中的id即可
Kotlin會(huì)遍歷你的xml文件彤避,創(chuàng)建對(duì)應(yīng)的虛擬包給你引用,使用的控件對(duì)象夯辖,其實(shí)是這個(gè)虛擬包里的控件對(duì)象琉预。
import kotlinx.android.synthetic.main.record_text_layout.*
kotlin語(yǔ)法
相對(duì)于java而已,kotlin的新語(yǔ)法
代碼中不需要";"結(jié)尾蒿褂,不需要new這個(gè)關(guān)鍵字
val定義常量和變量圆米,常量或者變量在前,類型在后啄栓,中間用":"分隔榨咐,有時(shí)候類型可以省略,kotlin支持類型推斷
變量必須初始化谴供,在不確定初始化的值的時(shí)候kotlin提供了懶加載lazy機(jī)制,最簡(jiǎn)單的在val前面加lateinit
允許為空的話用"?"齿坷,不允許為空的話用"!!"桂肌,聲明允許為空時(shí)数焊,必須聲明其數(shù)據(jù)類型,空指針安全并不是不需要處理空指針崎场,你需要用“?”聲明某個(gè)變量是允許空指針的
Kotlin里有區(qū)間的概念佩耳,用in判斷是否在某個(gè)區(qū)間
用when替代switch
kotlin定義數(shù)據(jù)類,在class前面加data即可
kotlin直接通過(guò)object提供單例模式谭跨,即在方法名前加object
kotlin中擴(kuò)張方法和屬性更簡(jiǎn)單
下面重點(diǎn)說(shuō)一下":"
定義變量(val name:String = "xiaoming")
定義參數(shù)類型(fun dispatchTouchEvent(event: MotionEvent))
定義返回值(fun showName():Boolean)
聲明類/接口的繼承(class TextRecordActivity : BaseActivity(), View.OnClickListener)
使用Java類(val intent = Intent(this, MainActivity::class.java))
Kotlin里干厚,類也可以有多個(gè)構(gòu)造函數(shù)(constructor),但是分成了1個(gè)主構(gòu)造函數(shù)和N個(gè)二級(jí)構(gòu)造函數(shù)螃宙,二級(jí)構(gòu)造函數(shù)必須直接或間接代理主構(gòu)造函數(shù)蛮瞄,也就是說(shuō),在Kotlin里谆扎,主構(gòu)造函數(shù)有核心地位(class ClientInfo(id:Long,name:String,addr:String))
初始化模塊init