Kotlin

官方编程指导文档:接口 · Kotlin 官方文档 中文版

by

关键字用法

by关键字用于实现委托模式。委托模式允许一个对象将某些操作委托给另一个对象来处理,从而减少代码重复和提高代码的可维护性。如类委托(绑定接口到另一个对象),属性委托(绑定属性到另一个类属性)

associateWith/associateBy/associate 将集合的值作为Map的键或值,并返回Map
groovy转kts

allowInsecureProtocol 改为isAllowInsecureProtocol=true 

https://developer.android.com/build/dependencies?hl=zh-cn#kts

 Gradle迁移指南:从Groovy到KTS - 简书

Migrating build logic from Groovy to Kotlin

Gradle Kotlin DSL Primer

Declaring dependencies

Android构建资料

https://developer.android.com/studio/build?hl=zh-cn

Gradle Kotlin DSL Primerhttps://docs.gradle.org/current/userguide/core_dependency_management.htmlGradle Kotlin DSL Primer

maven发布 https://github.com/gradle/kotlin-dsl-samples/blob/master/samples/maven-publish/build.gradle.kts
Kotlin注解

以下是 Kotlin 中的一些常见注解及其说明:

@JvmStatic: 将伴生对象(Companion Object)中的函数或属性编译为与 Java 兼容的静态函数或属性。

@JvmOverloads: 生成多个重载方法或构造函数,以便在与 Java 代码进行交互时可以省略部分参数。

@JvmField: 将属性生成为公共的 Java 字段,而不生成对应的 getter 和 setter 方法。

@Volatile: 标记属性为volatile,以确保多线程访问时的可见性。

@Synchronized: 修饰方法,将方法的执行体放在同步块中,确保方法的原子性。

@Throws: 标记方法可能会抛出指定的异常,以便为 Java 调用者提供异常信息。

@Deprecated: 标记函数、属性或类为过时的,在调用时会发出警告或错误。

@Suppress: 禁用指定类型的警告,可以级联多个警告类型。

@JvmName: 指定生成的 Java 方法或属性的名称。

@JvmMultifileClass: 将多个 Kotlin 文件编译成一个 Java 类。

@JvmSynthetic: 标记生成的方法或属性为一个合成方法,不会公开给 Java 代码。

@Target: 指定注解的使用范围,如方法、类、属性等。

这些只是 Kotlin 注解的一小部分,还有其他一些用于特定用途的注解。每个注解都有其特定的用途和行为,可以根据实际需求选择适合的注解来使用。在编写 Kotlin 代码时,将这些注解与代码的需求相匹配可以提供更好的互操作性和代码质量。

inner关键字用法

使用 inner 关键字的区别在于,如果内部类需要访问外部类的成员(包括属性和方法),那么需要将内部类声明为 inner 类。这样内部类就会持有一个对外部类对象的引用,并可以直接访问外部类的成员。

如果不使用 inner 关键字声明内部类,那么它就是一个嵌套类(nested class),它不持有对外部类对象的引用,也就无法直接访问外部类的成员。嵌套类的行为更像是普通的顶层类,它与外部类之间没有特殊的关联。

launch(Dispatchers.Default) 和 GlobalScope.launch 和 withContext(Dispatchers.IO) GlobalScope.launch适合于全局性的任务,launch(Dispatchers.Default)适合于受外部作用域控制的任务,而withContext(Dispatchers.IO)不启动协程,适合于在不同调度器上执行特定类型的任务。在实际使用中,应根据具体的需求选择合适的方式来启动协程
by lazy
懒加载
lateinit 延迟加载
::myVariable.isInitialized ::myVariable.isInitialized 的工作原理是获取变量 myVariable 的引用,然后访问它的 isInitialized 属性。:: 运算符返回的是一个引用,而不是变量本身,因此不会触发对变量的访问,也就不会抛出异常。- 判断延迟加载是否初始化
suspend关键词 * `suspend` 关键字用于声明一个挂起函数。挂起函数可以在协程中使用,它允许协程在等待异步操作完成时暂停执行。
* 挂起函数必须在协程作用域内调用。协程作用域可以使用 `runBlocking`、`launch` 或 `async` 函数创建。
* 挂起函数可以使用 `await` 关键字来等待异步操作完成。`await` 关键字会暂停协程的执行,直到异步操作完成。
* 挂起函数还可以使用 `yield` 关键字来暂停协程的执行。`yield` 关键字会暂停协程的执行,并返回一个值。当协程再次恢复执行时,它将从 `yield` 关键字处继续执行。
协程

创建协程不会创建线程。协程是在现有的线程上运行的。这意味着协程可以比线程更有效地利用系统资源。

以下是一些协程和线程的具体区别:

特性                    协程     线程
创建和销毁开销    小      大
执行方式           合作式   抢占式
调度方式    基于事件循环    基于时间片
资源利用率    高    低

viewModelScope、liveCycleScope與livedata builder https://medium.com/@alice.margatroid.love/%E7%AD%86%E8%A8%98-coroutine%E7%B0%A1%E4%BB%8B-%E4%B8%89-viewmodelscope-livecyclescope%E8%88%87livedata-builder-e8be67aade8

private fun continueDetect(resultCallback:(Pair<Int, Float>>)->Unit)

匿名函数作为参数和调用

private val resultCallback = { result: List<Pair<Int, Float>> ->  
    val sceneType = if (result.isNotEmpty() && result.first().second > 0.5) SceneType.Concert else SceneType.UNKNOWN  
    result.forEach {  
        showTip("sceneType is : ${sceneType.name} id:${it.first} score:${it.second}")  
        return@forEach // Use return@forEach to break the loop  
    }  
}  
LaunchedEffect 在Compose中启动协程 它允许你在 Composable 函数中启动一个协程,并确保协程在 Composable 重组时能够正确地处理。
kotlin图数据结构

Kotlin 标准库中没有提供 graph 图形结构,但有许多第三方库可以用来表示和操作图。其中一些最受欢迎的库包括:

jgrapht:jgrapht 是一个功能齐全的图库,它提供了各种算法和数据结构来表示和操作图。它支持有向图和无向图,并提供了许多有用的功能,如深度优先搜索、广度优先搜索、最短路径计算等。
kotlin-grap

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值