Ⅰ kotlin能和java混用嗎
上代碼,其實就是在gradle中加入kotlin的插件就好了.
首先是project 的gradle文件
buildscript {
ext.kotlin_version = "1.0.1" //加上這個,至於為什麼是1.0.1待會解釋
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0-alpha4'//這個不用管
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//加上這個⬆️
}
}
然後是mole的gradle文件
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' //加上插件
...
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
...
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" //加上庫
}
代碼是在android中運行的
kotlin代碼
data class Student(val name:String,val sex:Char,val age:Int,val course:Array<String>){
}
java調用代碼
public void demo() {
Student[] students = new Student[]{
new Student("x1",'男',14,new String[]{"數學","語文"}),
new Student("x2",'女',15,new String[]{"英語","語文"}),
new Student("x3",'男',16,new String[]{"化學","語文"}),
new Student("x4",'女',17,new String[]{"物理","語文"}),
};
for (Student student : students) {
Log.v(TAG,student.toString());
}
}
Ⅱ kotlin和java開發android哪個好
初級工程師,2周經驗來分享我的視角:1.無縫的Java互調保證了不會出現什麼繞不過的坑正式使用Kotlin之前嘗試過Kotlin與DataBinding同用,但是在.kt文件中import DataBinding相關的類會編譯報錯,最後把所有與DataBinding相關的代碼都放到.java中,在.kt中去調用。不了解Kotlin的反射與Java反射的差異,但是問題大概就是出在這里。2.Extension 帶來的語法糖,甜過初戀舉個栗子,各種system service再也不用強制類型轉換了,只需寫一個context的extension即可。事實上Anko庫已經提供了大量的寫好的extension。再也不用為了獲取一個簡單的service對象需要強制類型轉換而換行了。。。我吧一些application wide的東西都存為application的property,讓後給context一個extension,以後任何context來獲取這些service就是一個簡單的讀property了。3.Lambda衍生出來的Builder,最碉堡的是Anko庫可以用Kotlin像寫xml一樣寫潔面了,還有DSL preview插件幫你。。。這樣寫出來的潔面不但載入速度快(少了xml解析時間),配置各種view也是很方便的。但是使用lambda也是有坑的,有些以回調為key的方法是不可以使用匿名對象的,否則沒法取消。例如藍牙低功耗掃描時startLeScan(callback: LeScanCallback)stopLeScan(callback: LeScanCallback) 這種,開始和結束是要同一個object的,所以不要使用lambda。其實這個很好理解,lambda很像匿名Runnable,只不過現在是一個獲得了一等公民身份的方法。4.更多新一代語言的語法寫起來很爽的,不多表5.工具鏈相對完整有個JetBrains的爹,插件更新緊跟語言版本。各路大神的加持,JakeWharton的好幾個庫都有Kotlin特別適配版,rx裡面都有Kotlin版本了。。(事實上正在用RxKotlin,第一次使用rx)更多還在探索中。。。