+ 我要发布
我发布的 我的标签 发现
公开标签 #Kotlin
协程关键字 CoroutineScope 协程的作用域 CoroutineDispatcher 协程的调度器 +CoroutineContext 协程上下文 挂起函数 概念:使用关键词suspend修饰。 delay 将当前协程挂起指定时间,但不会阻塞线程,必须在协程的作用域或者其他挂起函数中执行。 withContext 必须在协程的作用域中调用,必须指定协程的上下文,函数的最后一行是返回值。 GlobalScope.launch { withContext(Dispatchers.Default)
多平台项目是 Kotlin 1.2 中的一个新的实验性的功能,允许你在支持 Kotlin 的目标 平台——JVM、JavaScript 以及(将来的)Native 之间重用代码。在多平台项目 中,你有三种模块: 1,一个公共模块包含平台无关代码,以及无实现的依赖平台的 API 声明。 2,平台模块包含通用模块中的平台相关声明在指定平台的实现,以及其他平台相 关代码。 3,常规模块针对指定的平台,既可以是平台模块的依赖,也可以依赖平台模块。 当你为指定平台编译多平台项目时,既会生成公共代码也会生成平台相关
现在有支持在 Java 7 和 8 中新添加的 JDK API 的标准库的独立版本。 如果你需要访问新的 API,请使用 kotlin-stdlib-jre7 和 kotlin-stdlib-jre8 maven 构件,而不是标准的 kotlin-stdlib。 这些构件是在 kotlin-stdlib 之上的微小扩展,它们将它作为传递依赖项带到项目中。 字节码中的参数名 Kotlin 现在支持在字节码中存储参数名。这可以使用命令行选项 -java- parameters 启用。 常量内联 编译器现在将
Kotlin Map 上的扩展函数 getValue() 返回一个与给定键相对应的现有值,或者抛出一个异常,提示找不到该键。如果该映射是用 withDefault 生成的,这个函数将返回默认值,而不是抛异常。 fun main(args: Array<String>) { //sampleStart val map = mapOf("key" to 42) // 返回不可空 Int 值 42 val value: Int = map.getValue("key") val mapWithDefault
minOf() 和 maxOf() 函数可用于查找两个或三个给定值中的最小和最大值,其中值是原生数字或 Comparable 对象。每个函数还有一个重载,它接受一个额外的 Comparator 实例,如果你想比较自身不可比的对象的话。 fun main(args: Array<String>) { //sampleStart val list1 = listOf("a", "b") val list2 = listOf("x", "y", "z") val minSize = minOf(list1.s
Kotlin1.1的关键新特性是协程,它带来了future/await、yield以及类似的编程模式的支持。Kotlin的设计中的关键特性是协程执行的实现是语言库的一部分,而不是语言的一部分,所以你不必绑定任何特定的编程范式或并发库。 协程实际上是一个轻量级的线程,可以挂起并稍后恢复。协程通过挂起函数支持:对这样的函数的调用可能会挂起协程,并启动一个新的协程,我们通常使用匿名挂起函数(即挂起lambda表达式)。 我们来看看在外部库kotlinx.coroutines中实现的: // 在后台线程池中运行
Kotlin/Native 是一种将 Kotlin 编译为没有任何虚拟机的原生二进制文件的技术。 它 包含基于 LLVM 的 Kotlin 编译器后端以及 Kotlin 运行时库的原生实现。 Kotlin/Native 主要为允许在不希望或不可能使用虚拟机的平台(如 iOS、嵌入式领 域等)编译、 或者开发人员需要生成不需要额外运行时的合理大小的独立程序而设 计的。 Kotlin/Native 完全支持与原生代码的互操作。对于平台库,相应互操作库已可以开 箱即用。对于其他库,我们提供了一个由 C 语言头
Kotlin 非常适合开发服务器端程序,允许编写简明且表现力强的代码, 同时保持与现有基于 Java 的技术栈的完全兼容性以及平滑的学习曲线: 1, 表现力:Kotlin 的革新式语言功能,例如支持类型安全的构建器和委托属性, 有助于构建强大而易于使用的抽象。 2, 可伸缩性:Kotlin 对协程的支持有助于构建服务器端应用程序, 伸缩到适度的 硬件要求以应对大量的客户端。 3, 互操作性:Kotlin 与所有基于 Java 的框架完全兼容,可以让你保持熟悉的技 术栈,同时获得更现代化语言的优势。 4,
Kotlin(JVM) 中定义下面这样两个方函数时,编译器会报错 fun foo(value: List<String>) {} fun foo(value: List<Int>) {} Platform declaration clash: The following declarations have the same JVM signature (method(Ljava/util/List;)V): 因为 Java 的泛型编译期擦除,所以 JVM 无法识别签名中泛型的区别,认为这两个函数签名冲
协程还是 WorkManager? 协程会在您的应用进程活动期间执行。如果您需要执行一个能够在应用进程之外活跃的操作 (比如向远程服务器发送日志),在 Android 平台上建议使用 WorkManager。WorkManager 是一个扩展库,用于那些预期会在将来的某个时间点执行的重要操作。 请针对那些在当前进程中有效的操作使用协程,同时保证可以在用户关闭应用时取消操作 (例如,进行一个您希望缓存的网络请求)。那么,实现这类操作的最佳实践是什么呢? 协程的最佳实践 由于本文所介绍的模式是在协程的其它最
枚举类成员 import kotlin.reflect.full.memberFunctions import kotlin.reflect.full.memberProperties fun main(arg: Array<String>) { val p = Person::class //类引用 println("成员列表(属性和函数)" + p.members.size) for (member in p.members) { println(member.name + " " + member
结合函数声明: String getString(@IntRange(from = 0) int columnIndex); 可以知道getString方法要求一个int类型的参数,且要求该最小为0 getColumnIndex的声明: @IntRange(from = -1) int getColumnIndex(String columnName); 很明显它的返回值是从-1开始的 编译器检查到你传入getSring的参数存在不符合要求的可能性,就报错提醒你咯。 解决方法 在实际开发过程中,为了防止
什么是协程 先来看官方对 Kotlin 协程的介绍:Coroutines basics A coroutine is an instance of suspendable computation. It is conceptually similar to a thread, in the sense that it takes a block of code to run that works concurrently with the rest of the code. However, a cor
coroutines如其名,是kotlin提供一种轻量级的协程API,也可以理解为kotlin提供的异步操作API。 学习主要是阅读官方提供文档,圈下自己感觉的重点。 The main difference between [runBlocking]and [coroutineScope]is that the latter does not block the current thread while waiting for all children to complete. runblocking和
Kotlin可见修饰符使用 kotlin可见修饰符和java中的类似,同样使用的是public 、protected、private修饰符,不过在kotlin中默认的是public,在java中默认的修饰符是包私有,在kotlin中只把包当作在命名空间中组织代码的一种方式使用,并没有对其做可见性控制,而是提供了一个新的修饰符,internal来替代。 修饰符 类成员 顶层声明 public 所有地方可见 所有地方可见 internal 模块内可见 模块内可见 protected 子类中可见 不可用 pr
1.概述 在本教程中,我们将深入研究Kotlin枚举。 随着编程语言的发展,枚举的使用和应用也得到了发展。 如今,Enum常量不仅是常量的集合,它们还可以具有属性,实现接口等等。 对于Kotlin初学者,请查看有关Kotlin基础知识-Kotlin语言简介的文章。 2.基本的Kotlin枚举 让我们看一下Kotlin中枚举的基础。 2.1。定义枚举 让我们将枚举定义为具有三个描述信用卡类型的常量: enum class CardType { SILVER, GOLD, PLATINUM } 2.2。初始
有一天看到项目中的Kotlin类,有的有.kt后缀,有的没有,针对这个情况我就简单看了下,然后记录一波 创建 Kotlin Class 或 Kotlin File 创建Kotlin class 创建Kotlin File 俩者区别 展现形式 外部展现 内部展现 延伸扩展、对向转换 Class无后缀 → File有后缀 File有后缀 → Class无后缀 结论: 来这里看看 .kt后缀 的出现场景、区别 创建 Kotlin Class 或 Kotlin File 新建操作:包名 - 右键 - New -
/** * RecyclerView滚动到指定位置 */ var mToPosition:Int = 0 // 记录目标项位置 var mShouldScroll:Boolean = false // 目标项是否在最后一个可见项之后 fun smoothMoveToPosition(mRecyclerView: RecyclerView,position:Int){ // 第一个可见位置 var firstItem = mRecyclerView.getChildLayoutPosition(mRecy
示例1:使用格式对数字取整 示例 fun main(args: Array<String>) { val num = 1.34567 println("%.4f".format(num)) } 运行该程序时,输出为: 1.3457 在上面的程序中,我们使用format()方法将给定的浮点数打印num到4个小数位。.4f 表示小数点后4位格式。 这意味着,最多只打印点后的 4个位置(小数位),f表示打印浮点数。 示例2:使用DecimalFormat舍入数字 示例 import java.math.Rou
一、排序的简单用法 在Java中,对List进行排序可以使用Collections.sort()方法,在Kotlin中有非常简单的语法糖,所以这里记录一下,开发中尽量用简单的方式,方便维护。 一段未排序的示例代码如下: data class User(val name: String, val isOnline: Boolean) fun main() { val user1 = User("1", false) val user2 = User("2", false) val user3 = User
在 Kotlin 中,您可以使用以下方法来进行延时操作: 使用 Thread.sleep() 方法进行延时 您可以使用 Thread.sleep() 方法来使当前线程进入睡眠状态。该方法会阻塞当前线程指定的时间,以毫秒为单位。例如,下面的代码将使当前线程睡眠 1 秒: Thread.sleep(1000) // 睡眠1秒 请注意,该方法会阻塞当前线程的执行,因此您应该避免在主线程中使用该方法,以免造成 UI 假死的情况。 使用 Coroutine 进行延时 在 Kotlin 中,Coroutine 是进
String.replaceAll 未运行且在 Kotlin 中不受支持。所以我建议一个演示示例,希望对您有所帮助。 var string = "vsdhfnmsdbvfuf121535435aewr" string.replace("[^0-9]".toRegex(), "") 您还可以利用 Kotlin 的 String.filter: var string = "vsdhfnmsdbvfuf121535435aewr" var result = string.filter { it.isDigit
方式一 代码设置字体加粗: tv.paint.isFakeBoldText = true 代码设置字体不加粗: tv.paint.isFakeBoldText = false 判断是否字体是否有加粗的情况: tv.paint.isFakeBoldText 方式二(推荐) 代码设置字体加粗: tv.typeface = Typeface.defaultFromStyle(Typeface.BOLD) 正常样式 tv.typeface = Typeface.defaultFromStyle(Typeface
Let 使用方法: // 作用1:使用it替代object对象去访问其公有的属性 & 方法 object.let{ it.todo() } // 作用2:判断object为null的操作 object?.let{//表示object不为null的条件下,才会去执行let函数体 it.todo() } // 注:返回值 = 最后一行 / return的表达式 示例: // 使用Java if( mVar != null ){ mVar.function1(); mVar.function2(); mVar