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

Kotlin 2.0 跟随全新的更快、更灵活的 K2 编译器一起发布

新的控制流引擎有助于检测异常代码、缺陷和其他潜在问题,从而有助于提高语言的安全性。 由于这些变化带来的语言表达性的改进,Kotlin 2.0 现在能更好地支持运算符和数字转换的组合。...这就是为什么 JetBrains 专注于扩展语言(语法)的功能来检查数据和描述条件,从而提高可读性和消除嵌套层的原因。此外,他说,智能强制类型转换可以减少认知负荷,因为你不需要学习新的结构。...animal.purr() } } 同样,智能强制类型转换将被传播,以保存有关可空性(nullability)、 is 检查、 as 强制类型转换和契约的状态。...当 Kotlin 2.0 应用新的智能强制类型转换时,另一种情况是将闭包内捕获的变量作为读 / 写。...Kotlin 将继续增强其控制流引擎,添加无需绑定的模式匹配、上下文敏感的解析、支持更智能强制类型转换的通用 ADT、效果系统等功能。

13810

Android:这是一份全面 & 详细的Kotlin入门学习指南

基本语法入门 本节,会详细讲解Kotlin的基本语法,主要包括: 基本观念(对比于Java) 数据类型 类 变量 & 常量 函数 其他语法糖(控制流、类型检查 & 转换、安全性等) 4.1 基本观念...,如果在声明 & 进行初始化时,会自行推导其数据类型。...智能转换 * 说明: kotlin不必使用显式类型转换操作,因为编译器会跟踪不可变值的is检查以及显式转换,并在需要时自动插入(安全的)转换 **/ var a: Any = "a" if (a...智能转换能否适用根据以下规则: // 1. val 局部变量——总是可以,局部委托属性除外; // 2. val 属性——如果属性是 private 或 internal,或者该检查在声明属性的同一模块执行...智能转换不适用于 open 的属性或者具有自定义 getter 的属性; // 3. var 局部变量——如果变量在检查和使用之间没有修改、没有在会修改它的 lambda 捕获、并且不是局部委托属性;

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

Carson带你学Android:这是一份全面 & 详细的Kotlin入门学习指南

基本语法入门 本节,会详细讲解Kotlin的基本语法,主要包括: 基本观念(对比于Java) 数据类型 类 变量 & 常量 函数 其他语法糖(控制流、类型检查 & 转换、安全性等) 4.1 基本观念...,如果在声明 & 进行初始化时,会自行推导其数据类型。...智能转换 * 说明: kotlin不必使用显式类型转换操作,因为编译器会跟踪不可变值的is检查以及显式转换,并在需要时自动插入(安全的)转换 **/ var a: Any = "a" if (a...智能转换能否适用根据以下规则: // 1. val 局部变量——总是可以,局部委托属性除外; // 2. val 属性——如果属性是 private 或 internal,或者该检查在声明属性的同一模块执行...智能转换不适用于 open 的属性或者具有自定义 getter 的属性; // 3. var 局部变量——如果变量在检查和使用之间没有修改、没有在会修改它的 lambda 捕获、并且不是局部委托属性;

2.1K20

不要用Java的语法思维来写Kotlin

个人感觉对于Null的检查是Koltin最语法糖的东西了,强制在编码过程中考虑空指针,因此《十亿美元的错误》,也许你不会再有这个机会犯错了(也许可以说成,你赚了十亿美金 ^_^)。...将任何值转换为非空类型,若该值为空抛出异常。我们可以写 a!!...is操作符和变量使用之间不可改变时,智能转换不能用。智能转换的适用条件或规则: val局部变量-总是适用! val属性-适用于private或internal,或者类型检查is/!...函数的返回值可以是null 8.真的要习惯Koltin的for循环,太强大了 Kotlin没有Java的for(初始值;条件;增减步长)这个规则。...但是Kotlin对于for循环语句新增了其他的规则,来满足刚提到的规则。

3K40

写了多年的Java,直到看到Kotlin,原来代码可以如此优雅!

个人感觉对于Null的检查是Koltin最语法糖的东西了,强制在编码过程中考虑空指针,因此 《十亿美元的错误》 ,也许你不会再有这个机会犯错了(也许可以说成,你赚了十亿美金 _ )。...将任何值转换为非空类型,若该值为空抛出异常。我们可以写 a!!...is 操作符和变量使用之间不可改变时,智能转换不能用。智能转换的适用条件或规则: val局部变量-总是适用! val属性-适用于private或internal,或者类型检查is/!...函数的返回值可以是null 8.真的要习惯Koltin的for循环,太强大了 Kotlin没有Java的for(初始值;条件;增减步长)这个规则。...但是Kotlin对于for循环语句新增了其他的规则,来满足刚提到的规则。

3.3K40

Kotlin 1.2 的新增特性

1.2.0 版本的 JVM 而且,现在允许在 lambda 中进行智能强制转换,这些局部变量只在 lambda 之前被修改: 6 目标平台:运行 Kotlin 1.2.0 版本的 JVM 支持 :...BigInteger 和 BigDecimal 的运算与转换 Kotlin 1.2 引入了一组用于操作 BigInteger 和 BigDecimal 以及使用从其他数字类型进行转换函数。...如果满足条件,Closeable.use 可以调用 Throwable.addSuppressed 在一些其他异常处理后,关闭资源期间抛出异常时,Closeable.use 函数可调用 Throwable.addSuppressed...破坏性变更:通过内联的扩展接收器修复平台的 null 转义 在平台类型空值上调用的内联扩展函数并没有检查接收器是否为 null,并因此允许 null 转义到其他代码。...Kotlin 1.2 在调用点强制执行此检查,如果接收方为空,抛出异常。 要切换到旧行为,请将 fallback 标志 -Xno-receiver-assertions 传递给编译器。

2.8K70

Kotlin 1.2 的新增了哪些特性?

Kotlin 编译器现在可以使用类型转换信息进行类型推断。...called on "abacaba": 4 called on [1, 2, 3, 1, 2]: 2 目标平台:运行 Kotlin 1.2.0 版本的 JVM 而且,现在允许在 lambda 中进行智能强制转换...BigInteger 和 BigDecimal 的运算与转换 Kotlin 1.2 引入了一组用于操作 BigInteger 和 BigDecimal 以及使用从其他数字类型进行转换函数。...破坏性变更:通过内联的扩展接收器修复平台的 null 转义 在平台类型空值上调用的内联扩展函数并没有检查接收器是否为 null,并因此允许 null 转义到其他代码。...Kotlin 1.2 在调用点强制执行此检查,如果接收方为空,抛出异常。 要切换到旧行为,请将 fallback 标志 -Xno-receiver-assertions 传递给编译器。

2.8K10

Kotlin实用的语法糖:空安全、类型转换 & 相等性判断

今天,我将主要讲解,关于Kotlin的一些实用语法糖,主要包括: 范围使用:in、downTo、step、until 类型检查 & 转换:is、智能转换、as 相等性:equals()、== 、 ===...智能转换 * 说明: kotlin不必使用显式类型转换操作,因为编译器会跟踪不可变值的is检查以及显式转换,并在需要时自动插入(安全的)转换 **/ var a: Any = "a" if (a...智能转换能否适用根据以下规则: // 1. val 局部变量——总是可以,局部委托属性除外; // 2. val 属性——如果属性是 private 或 internal,或者该检查在声明属性的同一模块执行...智能转换不适用于 open 的属性或者具有自定义 getter 的属性; // 3. var 局部变量——如果变量在检查和使用之间没有修改、没有在会修改它的 lambda 捕获、并且不是局部委托属性;...强制类型转换:as **/ var any: Any = "abc" var str: String = any as String // 强制类型转换是不安全的,若类型不兼容则会抛出一个异常 var

1.2K11

Kotlin实用语法糖:空安全、类型转换 & 相等性判断

今天,我将主要讲解,关于Kotlin的一些实用语法糖,主要包括: 范围使用:in、downTo、step、until 类型检查 & 转换:is、智能转换、as 相等性:equals()、== 、 ===...智能转换 * 说明: kotlin不必使用显式类型转换操作,因为编译器会跟踪不可变值的is检查以及显式转换,并在需要时自动插入(安全的)转换 **/ var a: Any = "a" if (a...智能转换能否适用根据以下规则: // 1. val 局部变量——总是可以,局部委托属性除外; // 2. val 属性——如果属性是 private 或 internal,或者该检查在声明属性的同一模块执行...智能转换不适用于 open 的属性或者具有自定义 getter 的属性; // 3. var 局部变量——如果变量在检查和使用之间没有修改、没有在会修改它的 lambda 捕获、并且不是局部委托属性;...强制类型转换:as **/ var any: Any = "abc" var str: String = any as String // 强制类型转换是不安全的,若类型不兼容则会抛出一个异常 var

94910

从点滴基础探究Kotlin的独特魅力

,没有必要放在类 ④ 数组就是类.kotlin没有声明数组类型的语法 ⑤ kotlin标准库含有针对java标准库函数进行的简洁的包装:println就是一个 ③ 没有分号 1 函数 带有两个 Int...,后面就不再需要转换它,可以就把它当作你检查过的类型使用.实际上编译器进行了类型转换,这种行为称为智能转换. ② 使用 as 关键字来表示到特定类型的显示转换. ③ 当你对一个类的属性进行智能转换的时候..."之间的字符串,但是仍然可以使用in 运算符检查一个其他对象是否属于这个区间. 10 kotlin 的异常 与java类似,方法的调用者能捕获到这个异常并处理它;如果没有被处理,异常会沿着调用栈再次抛出...java 的 switch ,而且更强大.⑥ 检查过变量具有某种类型之后不必显示地转换它的类型 : 这就叫 智能转换.⑦ for 在kotlin更加方便,特别是需要迭代map的时候,又或者迭代集合需要下标的时候...in运算符来检查值是否属于某个区间.⑨ kotlin 的异常和java相似,除了kotlin不要求你声明函数可以抛出的异常.

2.6K30

如何在Java和Swift避免空引用异常?

我们从 Optional得到的一个好处是,它提供了一组更高阶的函数,这些函数可以被链接起来,不必担心值是否存在。...一种更优雅的方法是使可选API提供的一系列高阶函数: 如果用户存储库返回的Optional为空,flatMap将只返回一个空可选项。否则,它将返回可选的包装用户的地址。这样,就不需要进行任何空检查。...Nullable Chaining 与Java的Optionals 一样,Kotlin的可空值也可以通过使用例如null-safe调用操作符进行链接。...这样的表达式总是返回一个可选项,如果链任何可选项都不包含,该表达式将包含结果对象或none。因此,必须再次检查可选链的结果是否为nil。...一个保护语句只包含一个条件和/或一个未包装的语句和一个强制的else块。编译器通过使用控制传输语句(返回、抛出、中断、继续)或调用从未返回类型的方法来确保这个else块退出其封闭范围。

2.7K30

Kotlin for Java Developers 学习笔记

Kotlin 中会以 Unit 的形式返回 Kotlin函数可以定义在任何地方:顶层、类的成员、函数定义另一个函数 调用顶层函数相当于 Java 的 static 函数 // MyFile.kt...Kotlin 中使用 as 进行类型转换,同样可以对 as 进行 ? 修饰 if (any is String) { any.toUpperCase() } (any as?...默认级别是 public 和 final 的,如果需要不是 final 的需要显式说明 open Java 的默认级别是 package-level,同一个包内其他类可见,这个在 Kotlin 叫做...internal override 在 Kotlin 强制的,避免意外 override protected 在 Java 仍然对同一个包内的其他类可见,在 Kotlin 只对子类可见 private...Exception,而不需要明确地检查是不是为 null 这种情况可以在 Java 代码增加注解 @Nullable、@NonNull 等,这样 Kotlin 就可以强制检查 Nullable 的数据

1.8K10

Kotlin 1.2 有哪些新特性

{ println("defaultStrings = $defaultStrings") println("customStrings = $customStrings") } 根据强制转换的信息...,能够推断出变量类型 Kotlin编译器现在支持通过强制转换的信息,来推断出变量类型。...如果你在调用一个返回“T”的泛型方法时,试图将它的返回值“T”转换为特定类型如“Foo”,编译器现在知道这个方法调用的“T”其实是“Foo”类型。...比如下面这样: val button = findViewById(R.id.button) as Button 智能转换的改进 当一个变量为某个安全表达式(如校验非空)所赋值时,智能转换也同样运用于这个安全调用的接收者...countInList = countFirst(list) println("called on $list: $countInList") } 另外,Lamba表达式同样支持对局部变量进行智能转换

87220

Kotlin 1.4 来了!全新语言特性和更多改进

新语言特性 Kotlin 1.4 引入的新语言特性改善了编写 Kotlin 代码的 "人机工程学",例如: Kotlin 接口的 SAM 转换 过去,只有 Java 编程语言中定义的功能接口(即只有一个单一抽象方法...官方文档说明了如何启用显式 API 模式并开始使用这些附加检查。...编译器的改进 上述语言特性是 Kotlin 1.4 密切贴合开发者的一部分改动,其他大部分工作是以提高 Kotlin 编译器的整体质量和性能为主。...现在,所有开发者都可以利用的优势之一是 更强大的新类型推理算法 (默认启用),它可以在更多用例自动推理类型,即使在复杂的场景下也支持智能转换,帮助开发者提高工作效率。...因此,即使您当前不使用 Jetpack Compose 进行开发,我们同样建议您尝试全新 alpha 版 Kotlin/JVM 后端,如果在使用中有任何问题和功能请求请提交到 问题跟踪器。

77630

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

为了让你强制基础设施注册一个转换器,只有一个办法,我们提供@ReadingConverter并@WritingConverter在转换器实现使用注解。...Kotlin 支持 Kotlin是一种面向 JVM(和其他平台)的静态类型语言,它允许编写简洁优雅的代码,同时提供与用 Java 编写的现有库的出色互操作性。...如果您通过start.spring.io引导 Kotlin 项目,默认提供这些。 20.2.零安全 Kotlin 的关键特性之一是空安全,它null在编译时干净地处理值。...(Kotlin 允许使用具有可为空值的函数式构造。请参阅Kotlin 空值安全性综合指南。)...默认情况下,来自 Kotlin 中使用的 Java API 的类型被识别为平台类型,对其进行检查

2.3K30

Kotlin 变量、常量和类型

如果不超过 Int 的范围,该类型为 Int。如果超过,类型为 Long。若要显式指定 Long 值,请将后缀 L 附加到该值。显式类型规范触发编译器检查值是否不超过指定类型的范围。...常量和变量 Kotlin 有强大的类型推断能力。虽然你可以显式地声明变量的类型,但通常会让编译器通过推断来完成这项工作。Kotlin 并不强制执行不变性,尽管它是被推荐的。...这是因为编译时常量 必须在编译时(程序编译时)赋值,而 main 和其他函数都是在运行时(程序运行时)才调用, 函数内的变量也是在那时赋值。编译时常量要在这些变量赋值前就已存在。...赋值与显式转换 Kotlin 是一种安全的语言,对于类型的检查非常严格,不同类型数值进行赋值是禁止的. Kotlin要想实现这种赋值转换,需要使用转换函数显式转换。...,由于参与进行数学计算的数值类型可能不同,编译器会根据上下文环境进行隐式转换

93010

Kotlin的互操作——Kotlin与Java互相调用

小编说:互操作就是在Kotlin可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的。...Java的任何引用都可能是null,这使得Kotlin对来自Java的对象进行严格的空安全检查是不现实的。Java声明的类型在Kotlin称为平台类型,并会被特别对待。...③ 返回void的方法 如果在Java返回void,那么Kotlin返回的就是Unit。如果在调用时返回void,那么Kotlin会事先识别该返回值为void。...④ 静态方法 Kotlin将包级函数表示为静态方法。如果对这些函数使用@JvmStatic进行标注,那么Kotlin还可以为在命名对象或伴生对象定义的函数生成静态方法。...Kotlin在JVM虚拟机运行时会检查所有的公共函数,可以检查非空值,这时候就可以通过NullPointerException得到Java的非空值代码。

3.7K10
领券