另外,如果您是 API 的使用者,则可能愿意将第三方 API 界面适配协程,以使它们对 Kotlin 更友好。...Android 专用 API 对于 Jetpack 库或 Android 平台 API,您可以参阅 Jetpack KTX 库 列表。...对于协程来说,理想的 API 是一个直接返回确切结果的挂起函数。 注意: 这一 API 返回值为 Task,并且已经有了对应的 适配器。出于学习的目的,我们用它作为范例。...: return // 忽略为空的结果 for (location in result.locations) { try { offer(location...您应当考虑通过创建协程适配器使您的 API 或现存 API 简洁、易读且符合 Kotlin 的使用习惯。
不过,另一个业界推测是可能跟那宗与 Oracle 旷日持久的 Java 侵权案有关—— Oracle 花了十多年的时间追究 Google 在 Android 中使用 Java API 的侵权索赔,最终...其他的问题还包括 Java 无法将类型参数标记为可空(最近才刚刚修复);Kotlin 的重载规则考虑到了可空性,Java 的重载规则却没有考虑到。...例如,团队得更新 Redex 才能支持 Java 无法生成的字节码模式。另外,其使用的某些内部库要求在编译期间进行字节码转换来获取更好的性能。...而在 Kotlin 这边,团队还没有找到能够解析类型的好办法,所以选择使用 Kotlin 编译器 API。...android/android-java-kotlin-migration/ 声明:本文为InfoQ翻译,未经许可禁止转载。
现在,使用Kotlin编写的代码,可以在所有的应用程序中(包括后端,浏览器前端和Android移动应用程序)中重复使用。 ?...跨平台 跨平台项目是 Kotlin 1.2 中的一个新的实验性功能,它允许开发者从相同的代码库构建应用程序的多个层——后端、前端和Android应用程序,在这个跨平台方案中,主要包含三个模块。...为确保与新模块系统的兼容性,Kotlin做出的另一个更改是将kotlin.reflect从kotlin-reflect库中移除。...这可能会影响应用程序的整体性能;只有在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。...返回不正确true时x为空。从Kotlin 1.2开始,调用x.equals(…)一个平台类型的null值会抛出一个NPE (但是x == …不会)。
本文将带您了解 Android 11 SDK 引入了哪些变更,以便在 API 中显示更多的可空性信息。此外,我们还将介绍一些实用方法与技巧,帮助您做好准备,顺利应对 Kotlin 中的可空性问题。...如果我使用的 (Android) API 不是用 Kotlin 编写的,该怎么办?...不用担心,Kotlin 编译器能够识别 Java 代码的注释,从而判定方法返回的结果是否为可空值,例如: JAVA public @Nullable String getCurrentName() {...@NonNull 注释则恰好与之相反,如果一个方法标有 @NonNull 注释,Kotlin 编译器会将该方法返回的结果视为非空类型,并禁止您在之后的代码中把该结果设置为 null。...下一步 如果您正在使用 Kotlin 编写代码,当您从 Android 10 升级至 Android 11 SDK 后,您可能会遇到一些新的编译器警告,另外,之前的警告也可能会以错误形式出现。
概念 本质:一种软件架构风格 核心:面向资源设计的API 解决问题: 降低开发的复杂性 提高系统的可伸缩性 例如:设计一套API,为多个终端服务。...一般而言,API中的名词应该使用复数。例如,使用users反映用户资源的URI,而不是使用user。...) DELETE:从服务器删除资源 例如: POST/zoos : 新建一个动物园 GET/zoos/ID : 获取某个指定动物园的信息 PUT/zoos/ID : 更新某个指定动物园的信息 DELETE...例如创建用户资源时需要用户名、密码,而前端只提供用户名字段,那么就要返回一个422 状态码,并返回错误信息:”密码不能为空“ 500 INTERNAL SERVER ERROR 服务器内部错误,此时服务端无法处理任何请求...identity : 返回完整的资源对象 PATCH/collections/identity : 返回被修改的属性 DELETE/collections/identity : 返回一个204状态码和空响应体
从去年的转向OpenJDK,到现在的支持Kotlin作为官方语言,某种意义是为了摆脱藉由9行代码敲诈获取天价赔偿的Oracle。 选用Kotlin,实至名归,这个荣誉它值得拥有。...在移动开发中,相比iOS程序员,Android程序员总是很幸运,因为我们有很多优秀好用的工具(Android Studio等),选用Kotlin,则是Google 为开发者提供高效的开发工具的一贯作风。...对于Android 开发者,我们多了一种开发Android的语言选择,那些对于之前由于前景不明朗却对Kotlin跃跃欲试的人可以放心使用了。有了Kotlin意味着开发效率应该会有所提升。...这种可为空的类型,使用Kotlin之后,我们程序的空指针会得到明显的改善。 3.实用,高效率。...决定Kotlin使用这么多语法糖的除了简洁,高效可读之外,还有一个原因,是因为kotlin编译生成的class文件是目标到JVM 6(基于JVM 6 是一种权衡后的结果),比如我们在Kotlin中使用了
未注解的参数和返回值类型将被视为平台类型,从而弱化 Kotlin 的空值安全保证。 最新的 Android 9 包含了 Android SDK 的更新,为一系列最常用的 API 加上了可空性注解。...新的 Android SDK 作为 Android 9 连带发布的一部分,包含了一些常用 API 的可空性注解,当 Kotlin 调用了 SDK 中任何带有注解的 API 时,它能预留出空安全性 (null-safety...△ 使用 Android Studio中的 SDK Manager来为 API 28 级第 6 版安装 SDK 检查 Android 8.+ (P) 并点击 OK。...如果您使用的是 Java 编程语言,违反可空性协议的将不会产生任何编译器警告或报错。仅 IDE 的代码检查功能可检示这些问题。 此外,您可在整个项目中检查代码,并审阅总体结果。...具备与 Kotlin 更合拍的 Android SDK、AndroidX 中的可空性注解 (Jetpack 系列的一部分) 以及 Android KTX 之后,我们将继续为使用 Kotlin 的开发者改进
类的继承和实现很简单,使用:即可 Kotlin每个句子都不需要加分号(;) 空指针安全 空指针(NullPointerException或NPE)是我们使用Java开发程序中最常见的崩溃了。...,即表示这个变量或参数以及返回值可以为null,否则不允许为变量参数赋值为null或者返回null 对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上?,否则编译无法通过。...关于空指针安全的原理,可以参考这篇文章研究学习Kotlin的一些方法 支持方法扩展 很多时候,Framework提供给我们的API往往都时比较原子的,调用时需要我们进行组合处理,因为就会产生了一些Util...所谓的高阶函数就是 可以接受函数作为参数 也可以返回函数作为结果 举一个接受函数作为参数的例子。...利用Kotlin中的高阶函数的功能,我们能更好的解决这个问题 当然这上面的例子中我们也同时使用了方法扩展这个特性。 Kotlin支持了Streams API和方法引用,这样函数式编程更加方便。
Kotlin 编译器自动添加的 Continuation 对象 通过类型转换获取协程的续体 (continuation),这是恢复协程的关键 2、核心实现:KotlinExtensions.await...处理空响应体 val invocation = call.request().tag(Invocation::class.java)!!...Kotlin 标准协程 API 取消传播:通过 CancellableContinuation 实现取消联动 线程安全:自动处理线程切换 异常透明:保持协程的异常传播机制 通过这种实现,Retrofit...将传统异步网络请求完美融入 Kotlin 协程体系,使开发者能够以同步方式编写异步代码,同时保持完整的错误处理能力和取消响应能力。...平台) 代码结构 回调地狱风险 同步式线性代码 错误处理 通过 onFailure 回调 try/catch 或协程异常处理器 五、总结流程 编译期:Kotlin 为 suspend 方法添加 Continuation
---------- 二、安全性 空安全:避免空指针异常。当变量可以为null时,必须使用可空安全符?进行声明,否则会出现编译错误。声明变量为可空后,在运行时便不会抛出异常。...---------- 三、完全兼容Java 类似于swift于OC的关系,虽然官方推荐使用新语言Kotlin进行Android开发,但是前提新语言必须兼容旧语言(否则是无法得到google的认可的)。...同时Kotlin代码也可以反编译成Java代码(1.Tools>Kotlin>Show Kotlin Bytecode 2.Decompile)。 Java的API = Kotlin的API。...这就在编译期间杜绝了空指针异常。但是这里要注意一点,如果从Java返回的集合,不会强制做可空检查,这个是时候如果给不可空引用赋值Java集合中的null会出现转换错误异常。...并不能吸引除Java,Android之外的更多开发者加入(JS平台使用的人并不多)。 2、与Java的交互性,让它能够依赖Java成长。但是对Java的依赖和兼容性注定无法完全替换Java。
2019 大会上,我们发布了使用 Kotlin API 开发的 Jetpack Compose 开发者预览版。...Kotlin 是一种与 Android 兼容的语言,它不仅语法简洁、更具表达性,还具备类型安全和空值安全的特性。...此外,许多 Android 开发者已经发现 Kotlin 不仅可以提高开发速度,还能为编程带来更多乐趣,因此,我们希望为这些 Kotlin 用户提供更好的支持。...要了解详情,请参阅 Kotlin 互操作文档。 你们有 Android API 的 Kotlin 参考文档吗? 有!我们正努力使所有 Android API 文档都包含惯用 Kotlin 参考。...因此,Kotlin 不能保证它们未来的可用状态,Android 自然也无法做出承诺。 Kotlin 对 APK 大小/方法数有什么影响?
作者 / Yacine Rezgui 无论您是在应用中请求某项权限,从文件管理系统中选择某个文件,还是期望从第三方应用中获取到某些数据,都会涉及到在 Activity 之间传递数据,而这也正是 Android...,并验证该 requestCode 的结果是否为 OK,最终再去验证返回数据或扩展数据。...ActivityResult API https://developer.android.google.cn/reference/kotlin/androidx/activity/result/package-summary...您也可以在启动 Activity 的地方使用一个独立的类接收返回结果,这样依然能够保证类型安全。 如何使用 接下来我们通过一个打开文档的示例,来演示如何使用 ActivityResult API。...现在就使用最新稳定版的 Activity 和 Fragment 库,通过 ActivityResult API 以类型安全的方式处理您的 Intent 结果吧!
大神(Dagger、ButterKnife、Retrofit、OkHttp...之父)就专门写了篇Using Project Kotlin for Android为Kotlin站台。...相对Java来说,Kotlin在编写代码时有如下优势:代码简洁高效、函数式编程、空指针安全、支持lambda表达式、流式API等。...它几乎可以在今天使用Java的任何地方使用:用于服务器端开发,Android应用程序等等。 Kotlin与所有现有的Java框架100%兼容,并且具有良好的工具支持。...is String -> print("Not a string") else -> print("Unknown") } } 空值检查 Kotlin中,如果一个值可能为null就必须显式标示为...开发 Kotlin 多平台开发 Kotlin Native Kotlin 协程 Kotlin 响应式编程 ---- Kotlin 开发者社区 国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin
大神(Dagger、ButterKnife、Retrofit、OkHttp...之父)就专门写了篇Using Project Kotlin for Android为Kotlin站台。...相对Java来说,Kotlin在编写代码时有如下优势:代码简洁高效、函数式编程、空指针安全、支持lambda表达式、流式API等。...它几乎可以在今天使用Java的任何地方使用:用于服务器端开发,Android应用程序等等。 Kotlin与所有现有的Java框架100%兼容,并且具有良好的工具支持。...就必须显式标示为nullable,使用问号?...开发 Kotlin 多平台开发 Kotlin Native Kotlin 协程 Kotlin 响应式编程 ?
重构 Plaid 的目标不仅是修复内容源 API 接口的失效问题,更重要的是应用最新的 Android Jetpack、Kotlin 语言特性和 Android 应用架构指南,因此 Plaid 2.0...将不仅仅是 Material Design 的示例应用,同时还将是一个使用了 Kotlin 的符合 Android 应用架构指南的示例应用。...,我们设计了 RemoteDataSource 和 LocalDataSource 两个类,其中 RemoteDataSource 将用来与 API 服务交互,构造请求数据,接收响应数据;而 LocalDataSource...特别要提到的是,每个 UseCase 类将只负责完成一个单独的任务,比如回复评论等: 第三层是 UI 层,首先我们设计了一个 ViewModel 类,它的目标将是为界面的显示提供数据,以及根据用户的操作触发不同的响应...《31 天,从浅到深轻松学习 Kotlin》,或 点击这里 访问 Android 开发者文档网站。
Google 从 Api 19 到 21 对 Android 做了什么丧尽天良的事儿,我胡乱写的那些代码 N5 大概也许都不认识了吧,时过境迁,岁月不饶人啊。...可是我现在调用 Kotlin 的 allSuperType 来获取所有父类就会触发它的加载,这又是怎么回事? 原来 Kotlin 在通过反射查询这些父类的时候,会运行到这里: ?...显然,作为一个静态内部类,它的 enclosingMethod 和 enclosingConstructor 都为 null,于是判断 simpleName 是否为空是一定会执行到的。...总结下,单纯对静态内部类、接口的加载不会直接触发外部类的加载,而 Kotlin 的反射中为内部类、接口创建 classId 的行为又不可避免的要触发外部类的加载。...Android Support 库里面 FragmentActivity 的父接口里面居然有对涉及到兼容 Api 的显式引用,这个写法简直了,臭臭的。。 我觉得这事儿不怪 Kotlin ! ----
重构 Plaid 的目标不仅是修复内容源 API 接口的失效问题,更重要的是应用最新的 Android Jetpack、Kotlin 语言特性和 Android 应用架构指南,因此 Plaid 2.0...将不仅仅是 Material Design 的示例应用,同时还将是一个使用了 Kotlin 的符合 Android 应用架构指南的示例应用。...,我们设计了 RemoteDataSource 和 LocalDataSource 两个类,其中 RemoteDataSource 将用来与 API 服务交互,构造请求数据,接收响应数据;而 LocalDataSource...特别要提到的是,每个 UseCase 类将只负责完成一个单独的任务,比如回复评论等: 第三层是 UI 层,首先我们设计了一个 ViewModel 类,它的目标将是为界面的显示提供数据,以及根据用户的操作触发不同的响应...,请查看: github.com/android/pla… 关于 Kotlin 的更多知识,可以参考我们之前发布的内容《31 天,从浅到深轻松学习 Kotlin》,或 点击这里 访问 Android
前言 从刚接触 Android 的时候有一些业务场景真的让人蛋疼,虽说不是无解,但问题是解决了,但看着这堆代码总觉得哪里怪怪的。 那么,是什么问题呢?...最后的结果就是,大家在这方面思考的少,而现有的系统API、第三方库甚至自己稍微捣鼓捣鼓,也能解决,所以,Android 的 UI 开发体验一直都不如前端。...在组件化的工程中,由于我们的业务模块间是物理隔离(模块间无法在编译期间访问各自的代码)的,模块间想获取不属于自己的数据(状态)时就会有问题,例如: 模块A里的某个 Activity/Fragment 想获取到模块...(推荐)使用依赖注入的方式发现服务,通过注解标注字段,即可使用,无需主动获取 // Autowired注解中标注name之后,将会使用byName的方式注入对应的字段,不设置name属性,会默认使用...但是,使用不当的同时也为项目埋下了一颗定时?[4]。 Android 端 redux 实现 Android 组件间通信的方案给人的感觉更偏向通信而没有前端状态管理的那个味儿。那,能不能。。。 能!
在 Kotlin 中使用 Android 的 Java API 时,您会迅速意识到这样的做法失去了 Kotlin 语言简单有趣的特点。...-ktx 软件包会包含 Kotlin 的扩展: // 获取最新 Lifecycle 库的版本信息 // https://developer.android.google.cn/jetpack/androidx...Android 平台 API 的 Kotlin 扩展,导入 core-ktx 软件包即可。...core-ktx 为来自 Android 平台的 API 提供了常用的 Kotlin 功能。.../core-ktx/src/main/java/androidx/core/widget/TextView.kt;l=65 Jetpack API 可用的扩展主要提供给 Jetpack API 使用,这里我会快速介绍一下目前我使用的比较频繁的扩展
由于ArkTS组件都是声明式的,早期没有方案动态为其添加C的子节点,因此无法直接解决混合嵌套问题。...b)初步优化方案:部分复用布局产物 在鸿蒙API 12版本推出后,支持了新的文本渲染能力,使我们能够实现在对文本布局后,除了使用文本的大小信息外,也可以保留布局中间产物,这为我们文字渲染性能优化提供了新的思路...950%,性能缺口较大,且无法依赖系统AOT来弥补; 鸿蒙下使用Kotlin JS模式的限制较多,比如缺少多线程能力,无法做到真正的并发;JS逻辑需要运行在worker中,内存隔离对性能影响比较大;Kotlin...运行时的适配和优化 为Kotlin Native增加鸿蒙平台的互操作文件,对接系统API,同时调整运行时中涉及到架构、平台的判断等逻辑,使其实现对鸿蒙平台的支持。...为了提高效率使其变得可用,我们通过对Kotlin的调试插件以及配套运行时进行了优化,增加了调试信息获取的复用与缓存,以及调用合并,信息预加载等优化,实现了40倍的速度提升,使插件从基本不可用状态变得基本可满足日常开发调试需求