kotlin 和 java 的区别

148 阅读1分钟

空指针安全

支持方法扩展

//类型可以省略,即任意类型
fun 类型.⽅法名(参数...):返回值{
}```
class Jump {
    fun test() {
        println("jump test")
        //在被扩展的类中使用
        doubleJump(1f)
    }
}

fun Jump.doubleJump(howLong: Float): Boolean {
    println("jump:$howLong")
    println("jump:$howLong")
    return true
}

Jump().doubleJump(2f)
//在被扩展类的外部使用
Jump().test()
//在Java中调用Kotlin扩展,需要通过扩展所在的文件名+.的方式进行调用
KotlinExtensionKt.doubleJump(new Jump(), 2.0f);
### 协程
-   **轻量**:您可以在单个线程上运行多个协程,因为协程支持[挂起](https://kotlinlang.org/docs/reference/coroutines/basics.html "挂起"),不会使正在运行协程的线程阻塞。挂起比阻塞节省内存,且支持多个并行操作。
-   **内存泄漏更少**:使用[结构化并发](https://kotlinlang.org/docs/reference/coroutines/basics.html#structured-concurrency "结构化并发")机制在一个作用域内执行多项操作。
-   **内置取消支持**:[取消](https://kotlinlang.org/docs/reference/coroutines/cancellation-and-timeouts.html "取消")操作会自动在运行中的整个协程层次结构内传播。
-   **Jetpack 集成**:许多 Jetpack 库都包含提供全面协程支持的[扩展](https://developer.android.google.cn/kotlin/ktx?hl=zh_cn "扩展")。某些库还提供自己的[协程作用域](https://developer.android.google.cn/topic/libraries/architecture/coroutines?hl=zh_cn "协程作用域"),可供您用于结构化并发。

### 协程使用
        
                // 协程构建器         主线程
                GlobalScope.launch(Dispatchers.Main) {
                                     //任务调度器    子线程
                    val user=  withContext(Dispatchers.IO){
                          userServiceApi.User()
                    }
                    text.text="address:${user?.data?.get(0)?.category}"
                }
            }
       
-   launch - 创建协程
-   async - 创建带返回值的协程,返回的是 Deferred 类
-   withContext - 不创建新的协程,指定协程上运行代码块
-   runBlocking - 不是 GlobalScope 的 API,可以独立使用,区别是 runBlocking 里面的 delay 会阻塞线程,而 launch 创建的不会