1 Java 調用Kotlin
1 Kotlin的屬性:Getter/Setter ,@JvmField
2 Object 類 : 靜態變量 INSTANCE
3 方法可以含默認參數
4 構造函數、靜態方法:@JvmOverloads
5 包方法:包名+KT類
6 Internal 謹慎使用
2 Kotlin調用Java
1 屬性:自動轉換 Getter/Setter
2 空安全:平臺類型,是否加類型限制如String(?),由編碼人員自行決定,Java非空通過@NotNull限制
3 泛型:1 泛型參數有限控制,避免陷入死循環
2 實現class的子類
比如 所有的Activity 都要繼承如下抽象類
public abstract class BaseMvpActivity<P extends BasePresenter> {}
java :
public class ResultActivity<T extends BasePresenter> extends BaseMvpActivity<T> {}
java沒有用到具體類型,泛型T可以省略。
public class ResultActivity extends BaseMvpActivity {}
但kotlin不能省略
class ResultActivity<T : BasePresenter<*>> : BaseMvpActivity<T>() {}
4 synchronized和volatile: 從關鍵字換成爲註解@Synchronized,@Volatile或函數synchronized(var){}
5 SAM轉換:單方法的 Java接口可用Lambda替代,注意同樣的Lambda轉換單對象不同
SAM = single abstract method
Thread(Runnable { println("SAM") })
-> Thread({println("SAM")})
6 Java的方法是Kotlin的關鍵子,Kotlin調用時方法名用 反引號``轉義
7 Kotlin: ArrayList() 替代 Java :New ArrayList()
8 Kotlin沒有可變類型,我們需要 *轉換
fun connect(vararg strings: String): String {
val sb = StringBuilder()
for (string in strings) {
sb.append(string).append(",")
}
return sb.toString()
}
val listOf = arrayOf("a", "b")
// Kotlin並沒有可變類型,所以我們需要使用*+String集合 來表達String數組
println(connect(*listOf)) //打印a,b
3 Kotlin 配置gradle
根 build.gradle
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url "https://jitpack.io" }
maven{ url"https://maven.google.com"}
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0-alpha13'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
app build.gradle
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
//kotlin-reflect
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
//kotlin -coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
}
協程多一步 gradle.properties 文件中添加屬性
kotlin.coroutines=enable