Kotlin-與Java共存/gradle配置(四)

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

參考
Kotlin協程筆記
Kotlin-Coroutines-協程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章