首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin 开发者角度看 Java 缺失的特性

是否使用这些库是可选择的,而在 Kotlin 中,每种类型要么为空,要么为非空。...辅助类提供了一系列静态方法,并带有私有构造函数,因此不能被实例化。这是不得已而为之,因为 Java 不允许方法存在于类之外。...Kotlin 提供了扩展函数来解决同样的问题。 Kotlin 提供了不通过类继承或使用装饰器等设计模式来实现扩展类或接口的能力。这可以通过一种叫作扩展的特殊声明来实现。 ...,不需要类; Kotlin 的标准库中已经有 capitalize() 函数; 调用扩展函数,就好像它属于 String 类一样。...论 在这篇文章中,描述了 Java 中缺失的 4 个 Kotlin 特性:不可变引用、空安全、扩展函数和具体化泛型。

75520

Spring认证中国教育管理中心-Spring Data MongoDB教程十五

convert(String source) { return Email.valueOf(source); } } 如果您编写Converter的源类型和目标类型均为本机类型,我们无法确定是否应将其视为读取转换器或写入转换器...这意味着本质上添加所需的分片键信息(如果尚不存在)以replaceOne在更新实体时过滤查询。这可能需要额外的服务器往返来确定当前分片键的实际值。...20.1.要求 Spring Data 支持 Kotlin 1.3 并要求kotlin-stdlib(或其变体之一,例如kotlin-stdlib-jdk8)和kotlin-reflect存在于类路径中...(Kotlin 允许使用具有可为空值的函数式构造。请参阅Kotlin 空值安全性综合指南。)...20.3.对象映射 有关Kotlin对象如何具体化的详细信息,请参阅Kotlin 支持。 20.4.扩展 Kotlin扩展提供了使用附加功能扩展现有类的能力。

2.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin —— 这次入门就不用放弃了

通过一个个真实的场景,我们一边解决问题一边学习Kotlin的特性。 快速上手 如果不知道如何Kotlin中写一个相当简单的Java表达式。...它可以扩展函数:这意味着,就算我们没有权限去访问这个类中的代码,我们也可以扩展这个类的更多的特性。 它是函数式的:Kotlin是基于面向对象的语言。...如下 UI().setContentView(this@LoginActivity) 其中,dip(10),表示将10dp转换为像素的意思,是Anko的扩展函数,说到扩展函数发现Kotlin源码里大量地使用扩展函数...那当我每调用一个函数(不管是标准库函数,第三方库函数,还是队友写的函数,甚至自己写的函数),都会疑惑这个函数是否会抛出异常。...编译速度对比 不会试图比较一行代码的编译速度;相反,比较的是将代码从Java转换为Kotlin是否会影响其总体构建的时间。

1.6K30

DoorDash 的后端服务如何从 Python 迁移到 Kotlin

为实现具有更好可扩展性的系统,DoorDash 工程团队需要去分解单体应用,确定新服务的界面和交互行为。接下来的首要问题是如何确定支持团队工作的技术栈。...确定适用的技术栈 当前存在多种可用的服务器端软件构建方案。但是出于以下方面考虑因素,团队考虑只使用单一语言。 有助于团队聚力,推动最佳开发实践在整个工程组织内的共享。...当前对 Kafka 支持不够,特性发布存在延迟。 根据以上对比,团队决定开发一个经过测试和扩展Kotlin 组件的“黄金标准”。...进一步简化依赖管理 下面展开介绍团队时如何解决上述问题的  培训团队使用 Kotlin 采用 Kotlin 的一个最大问题,就是如何确保提升团队的开发速度。...团队更多地传授开发人员 Kotlin函数式编程方面内容,包括如何使用模式匹配、不可变性默认优先等理念。

84440

R8 编译器: 为 Kotlin 库和应用 瘦身

比如,Kotlin 元数据可以告诉 Kotlin 编译器类文件中的一个方法实际上是 Kotlin 扩展函数。...在我们的示例中,这些扩展函数属于顶层的函数,并且仅存在于 CommandBuilderKt 类文件中。接下来我们来看一下通过精简后的 javap 命令所输出的内容。...重要的是 Kotlin 编译器会读取其中的内容,并且通过这些内容确定了这些方法是扩展函数,如下 Kotlinp dump 输出内容所示。...(true).build() R8 过去是如何破坏 Kotlin 开发库的 正如前文所提到的,为了能够在库中使用 Kotlin API,Kotlin 的元数据非常重要,然而,元数据存在于注解中,并且会以...如果去除元数据,Kotlin 编译器就再也无法正确识别扩展函数

93430

为什么选择 Kotlin 重写后端服务?

为实现具有更好可扩展性的系统,DoorDash 工程团队需要去分解单体应用,确定新服务的界面和交互行为。接下来的首要问题是如何确定支持团队工作的技术栈。...1.确定适用的技术栈 当前,存在多种可用的服务器端软件构建方案。但是出于以下方面考虑因素,团队考虑只使用单一语言。 有助于团队聚力,推动最佳开发实践在整个工程组织内的共享。...当前对 Kafka 支持不够,特性发布存在延迟。 根据以上对比,团队决定开发一个经过测试和扩展Kotlin 组件的“黄金标准”。...进一步简化依赖管理 下面展开介绍团队时如何解决上述问题的 培训团队使用 Kotlin 采用 Kotlin 的一个最大问题,就是如何确保提升团队的开发速度。...团队更多地传授开发人员 Kotlin函数式编程方面内容,包括如何使用模式匹配、不可变性默认优先等理念。

8410

让你迷惑的 Kotlin 代码(3)

Kotlin 不允许在 Lambda 表达式中这样直接使用 return 。为什么呢?个人猜测正是因为可能存在 究竟是返回到哪里 的语义不确定性,Kotlin 就直接禁止了。...foreach 是 Kotlin 标准库中定义的扩展函数。把它和之前自己定义的 loop 比对一下。...关于 inline,写过一篇文章, 重学 Kotlin —— inline,包治百病的性能良药?。 为什么使用 inline 修饰的高阶函数中的 Lambda 表达式中可以使用 return 呢?...,若执行到这里,直接退出函数,不存在任何歧义。...最后再来个奇奇怪怪的需求,inline 修饰的高阶函数使得 Lambda 表达式中可以直接使用 return 从外部函数中直接退出,但是如果既想内联,又想禁止这一特性,即不允许 return ,该如何实现呢

46340

前沿 | 为什么要改用Kotlin

在写这篇文章前的一个多月,Flipboard中国的Android项目确定了正式将Kotlin作为项目开发语言,这就意味着新增的代码文件将以Kotlin代码格式出现,而且同时旧的Java代码也将会陆陆续续翻译成...注意:Kotlin的方法扩展并不是真正修改了对应的类文件,而是在编译器和IDE方面做得处理。使我们看起来像是扩展了方法。...利用Kotlin中的高阶函数的功能,我们能更好的解决这个问题 当然这上面的例子中我们也同时使用了方法扩展这个特性。 Kotlin支持了Streams API和方法引用,这样函数式编程更加方便。...(ButterKnife Kotlin版),RxKotlin,Anko等等,当然还有已经存在的很多Java的库都是可以使用的。...而比较难抉择的情况是如果如何让团队转用Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。

59810

使用协程和 Flow 简化 API 设计

本文将会介绍如何使用协程和 Flow 简化 API,以及如何使用 suspendCancellableCoroutine 和 callbackFlow API 创建您自己的适配器。...检查现有协程适配器 在您为现有 API 编写自己的封装之前,请检查是否已经存在针对您的用例的适配器或者 扩展方法。下面是一些包含常见类型协程适配器的库。...这里提到的并不是全部,您可以在线搜索以确定是否存在适用于您的 future 类型的适配器。...首先检查是否已经存在可用的适配器,如果没有,您可以使用 suspendCancellableCoroutine 针对一次性调用;或使用 callbackFlow 针对流数据,来创建您自己的适配器。...您可以通过 codelab: 创建 Kotlin 扩展库,来上手本文所介绍的话题。

1.6K20

Java 反射 VS Kotlin 反射

public Constructor[] getDeclaredConstructors() // 如果类声明在其它类的构造函数中,返回该类所在的构造函数,如果存在则返回,不存在返回null public...若不存在,返回 null。 public Method getEnclosingMethod() Kotlin 获取类的成员函数 Kotlin 通过反射调用函数,需要 KFunction 实例。...Kotlin 和 Java 的方法引用使用::操作符,Kotlin 除了可以引用类中成员函数扩展函数还可以引用顶层(top-level)函数。...而 KFunctionN 的invoke()方法的形参类型和返回值类型是可以确定的,调用它的 invoke() 时编译器会帮我们做检查。 当然,也可以使用 KFunctionN 来引用类的扩展函数。...引用扩展函数的用法跟引用成员函数的用法是一致的。

2.4K30

Kotlin 1.4 新特性预览

图 3:Kotlin 1.3 中提示类型不匹配 博客原文中给出的这个例子乍一看挺复杂,仔细想想问题主要在于我们可以通过 rulesMap 的类型来确定 mapOf 的返回值类型,进而再确定出 mapOf...因此对于属性代理类的 get 和 set 函数实现为内联函数的情形,编译器可以确切的分析出 KProperty 是否被用到,如果没有被用到,那么就不会生成这个 KProperty 对象。...图 7:多行编辑逗号的问题 这里这个逗号有时候会特别碍事儿,但如何每一行都可以有一个逗号这个问题就简单多了: ?...在 1.4 当中,这个特性仍然会继续保持实验状态,不过有两项改进: 支持使用内联特化的函数来实现契约 1.3当中不能为成员函数添加契约,从1.4开始支持为 final 的成员函数添加契约(当然任意成员函数可能存在被覆写的问题...小结 Kotlin 目前的语法已经比较成熟了,还是那句话,提升开发体验,扩展应用场景才是它现在最应该发力的点。 未来可期。

91910

遇见 Kotlin 先导篇:Kotlin 相比 Java 好在哪里?

在这笔者顺便打个广告 广告内容 腾讯课堂《跟鹅厂老司机学新技术》系列课程第一课 “遇见Kotlin” 将于今晚8点半开始啦 本期的主题为如何学习Kotlin和分享一些学习Kotlin过程的小技巧...与Java语言的互通性 Kotlin与Java100%互通,不通你打死 你可以用Kotlin继续你的Java项目 所有你熟悉的Java框架仍可用。...String> = ArrayList() //明确声明d为字符串型List if (obj is String) { print(obj.toUpperCase()) // obj 不确定是否为...直观的相等比较 在Kotlin中不像Java调用equals()函数那么麻烦。...扩展函数 向已有的类里添加新的函数 这是官方文档 Demo fun String.replaceSpaces(): String { return this.replace(' ', '_')

2.2K40

为什么要改用Kotlin

在写这篇文章前的一个多月,Flipboard中国的Android项目确定了正式将Kotlin作为项目开发语言,这就意味着新增的代码文件将以Kotlin代码格式出现,而且同时旧的Java代码也将会陆陆续续翻译成...那我们接下来看一看Kotlin的特点,当然这也是改用Kotlin的重要原因。...使我们看起来像是扩展了方法。 Lambda, 高阶函数,Streams API, 函数式编程支持 所谓的Lambda表达式是匿名函数,这使得我们的代码会更加的简单。...(ButterKnife Kotlin版),RxKotlin,Anko等等,当然还有已经存在的很多Java的库都是可以使用的。...而比较难抉择的情况是如果如何让团队转用Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。

61120

Kotlin 函数声明和扩展(extension)

而从使用者的角度,使用者必须预先知道这个 Utils 工具类的存在,他能使用为这个类添加的扩展方法。...但存在必然是合理的。自己就是一个写 Utils 的老司机。从个人角度来看,让使用 Utils 而不是对象继承的原因,主要是因为: 1....无法继承/重写这些类及其方法,只能通过 Utils 扩展; 2. 继承一个类比抽取代码块封装为函数的实现成本+替换成本高; 3....那么抛开 Utils 的设计缺点,我们是否可以避免使用上的缺点?Kotlin 提供的解决方法就是扩展(extension)。 2....扩展声明为顶层声明的时候可以被外部调用(是的,因为函数是一等公民,在方法内部也可以声明扩展方法)。 在函数体内用 this 来引用调用的实例,属性和方法的访问权限与普通调用一致。

94120

介绍Kotlin第二部分(翻译篇)

前言 在Kotlin介绍:第一部分,我们介绍了基本语法,现在我们可以去看看实际上如何使用Kotlin。...Kotlin系列的编程除了默认的不变性外,还来自于Kotlin stdlib的扩展功能。如果您熟悉函数式编程,那么您将熟悉大部分功能。它们是一组辅助函数和更高级的辅助函数,可以为您的集合提供常用操作。...Kotlin标准库的collection扩展功能的优点来自于易使用lambdas表达式,只需使用足够的类型推理来保证编程安全。在Kotlin中有几种方法来定义lambdas函数。...let只对存在的东西有用,作为扩展功能,它不能扩展存在的东西。...在Kotlin中类型推断是非常好的,编译器在编写代码时给出了很多有用的提示。当您需要检查对象是否是某种类型时,您可以使用is关键字。

94440

Kotlin 作用域函数(scope function)

绕不开的四兄弟 学习 Kotlin 一定绕不开 run/let/apply/also 这四兄弟,它们是 Kotlin 使用频率最高的扩展方法(扩展方法在之前文章有介绍),它们也被称为作用域函数(scope...函数是面向过程的产物,它天生就很容易产生耦合度高的代码。就看来,作用域函数更像是给函数打上的一个“补丁”。...泛型就默认你懂了,毕竟这里只讲 Kotlin 的新东西,Kotlin 泛型和 Java 的泛型除了写法没有什么区别。剩下的三个概念我们简单过一下吧。...对 Java 不可见后,这个 inline 方法则可以不在字节码里存在,因为调用的地方全部都内联了。 值得注意的是,和 C/C++ 一样,Kotlin 的 inline 也不是必然内联的。...但如果我们把是否为空的代码封装进一个扩展方法如 Any?.isNotNull() 里,那么编译器就无法识别 return 后面的代码局部变量是否为空了,这个局部变量依然是可空类型。

97210

Spring认证中国教育管理中心-Spring Data R2DBC框架教程七

本综合教程将教您如何使用start.spring.io使用 Kotlin 构建 Spring Boot 应用程序。...17.1.要求 Spring Data 支持 Kotlin 1.3 并要求kotlin-stdlib(或其变体之一,例如kotlin-stdlib-jdk8)和kotlin-reflect存在于类路径中...(Kotlin 允许使用具有可为空值的函数式构造。请参阅Kotlin 空值安全性综合指南。)...17.3.对象映射 有关Kotlin对象如何具体化的详细信息,请参阅Kotlin 支持。 17.4.扩展 Kotlin扩展提供了使用附加功能扩展现有类的能力。...扩展允许添加自定义运算符 Flow 收集操作正在暂停功能 map运算符支持异步操作(不需要flatMap),因为它需要一个挂起函数参数 阅读这篇关于Going Reactive with Spring

1.3K40
领券