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

K2 编译器将在 Kotlin 2.0 中进入稳定状态 | 官方博客

我们一直在为 Kotlin 编译器(代号 K2)开发新前端。前端是编译一部分,负责解析代码和执行语义分析、数据流分析、调用解析和类型推断。这是开发者与编译器交互最多部分。...简而言之,新架构在设计上更快、更可扩展,解决了旧编译器前端技术债务,修正了各个位置错误和极端情况,并为语言未来扩展铺平了道路。 对于编程语言,主要版本通常在引入主要功能破坏性更改时递增。...有新语言功能添加进来,旧错误得到修正。我们始终在尽量减少破坏性更改数量和影响,并遵循 Kotlin 语言演变流程。Kotlin 2.0 在这方面不会有任何不同。...这些问题: KT-4113 | KT-1982 | KT-28806 | KT-7186 此外,大量长期存在错误得到修正,并且,其中一些修正可能难免会破坏意外依赖于错误编译器行为代码。...因此,通过 Kotlin 语言版本 2.0 编译代码,您将使用新编译器前端并获得新编译器架构所有性能优势。但是,IDE 仍可能使用旧前端检查代码。

1.7K30

【翻译】Kotlin致简代码之路

Code ${response.code()}") } 假设你并不知道这个例子里所包含每个 Kotlin 特性,但是这段代码确很容易看懂。这才是最神奇地方!...我们不应该制造出那些一看到函数名称就感觉意图不明显,发生非期望隐藏变化。但是副作用到底是什么问题呢?...在 Java 中一个解决方案就是把 try 分解成子程序。尽管我们可以给这个子程序一个具有很好描述性名称,但有时候还是有点过头了。 单函数表达式 另外一个很贴心特性是单函数表达式。...编译器不允许我们在 order 订单属性上直接访问 customer 属性,因为我们并没有处理 order 属性值为 null 情况。编译器在编译阶段给我们指出了这个可能会发生错误。...有含义名称 函数 注释 格式 对象和数据结构 错误处理 下标边界 类 系统 访问权限暴露 并行性 关于命名如何处理?命名应该具有代表意义。当然与所使用语言是无关

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

Kotlin 1.2 新增了哪些特性?

之前推送过本人写一篇关于Kotlin,JS,Java ,Python全栈开发一些思考文章,分析了Koltin一个趋势,那么我们就来看看1.2正式版新增了哪些新特性?...例如,当一个 lambda 作为构造函数参数传递给一个对象,后者可以用于引用另一个必须稍后定义对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...如果调用一个返回类型参数 T 并将返回值转换为特定类型 Foo 泛型方法,则编译器现在可以理解此调用 T 需要绑定到 Foo 类型。...改进 smart cast 当一个变量从一个安全调用表达式中被赋值并且被检查为 null ,smart cast 也被应用到安全调用接收器中: ?...工具 将警告视为错误 编译器现在提供了将所有警告视为错误选项。在命令行中使用 -Werror,使用以下 Gradle 代码: ?

2.8K10

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

② 空安全类型 Kotlin空安全类型原理是,Kotlin编译过程中会增加一个函数调用,对参数类型或者返回类型进行控制,开发者可以在开发通过注解@Nullable和@NotNull方式来弥补Java...(普通Java对象) 当调用平台类型变量方法Kotlin不会在编译时报告可空性错误,但是在运行时调用可能会失败,因为空指针异常。...当把一个平台值赋给一个Kotlin变量,可以依赖类型推断(该变量会具有所推断出平台类型,如上例中item所具有的类型),或者选择我们所期望类型(可空非空类型均可)。...=item//允许,没有问题 Val notNull:String=item//允许,运行时可能失败 如果选择非空类型编译器会在赋值触发一个断言,这样可以防止Kotlin非空变量保存空值。...① 属性 Kotlin属性会被编译成以下Java元素: getter方法,其名称通过加前缀get得到; setter方法,其名称通过加前缀set得到(只适用于var属性); 私有字段,与属性名称相同(仅适用于具有幕后字段属性

3.7K10

Kotlin与Java互操作

(普通 Java 对象) 当调用平台类型变量方法Kotlin不会在编译时报告可空性错误,但是在运行时调用可能会失败,因为空指针异常。...当把一个平台值赋给一个Kotlin变量,可以依赖类型推断(该变量会具有所推断出平台类型,如上例中item所具有的类型),或者选择我们所期望类型(可空非空类型均可)。...可空注解 由于泛型原因,Kotlin编译可能出现空异常,而使用空注解可以有效解决这一情况。...属性 Kotlin属性会被编译成以下Java元素: getter方法,其名称通过加前缀get得到; setter方法,其名称通过加前缀set得到(只适用于var属性); 私有字段,与属性名称相同(仅适用于具有幕后字段属性...如果我们真的希望它们在 Kotlin 中使用相同名称,可以使用 @JvmName 去标注其中一个两个),并指定不同名称作为参数。

3.4K30

Kotlin 1.2 新增特性

例如,当一个 lambda 作为构造函数参数传递给一个对象,后者可以用于引用另一个必须稍后定义对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...:运行 Kotlin 1.2.0 版本 JVM 来自显式类型信息被用于类型推断 Kotlin 编译器现在可以使用类型转换信息进行类型推断。...如果调用一个返回类型参数 T 并将返回值转换为特定类型 Foo 泛型方法,则编译器现在可以理解此调用 T 需要绑定到 Foo 类型。...这可能会影响应用程序整体性能;仅在多个类之间共享一些复杂状态并在类初始化时更新才使用它。 “手工”解决方法是将控制流子表达式值存储在变量中,而不是直接在调用参数中对它们进行求值。...工具 将警告视为错误 编译器现在提供了将所有警告视为错误选项。在命令行中使用 -Werror,使用以下 Gradle 代码:

2.8K70

31 天,从浅到深轻松学习 Kotlin

第一周学习小结: 本周以基本知识为主:处理空错误,简化循环和条件,属性,解构架。下一周我们将会深入探索 Kotlin 更多功能。...Day 13:从 Java 编程语言调用 Kotlin 在同一个项目中使用 Kotlin 和 Java?您有没有顶级功能属性课程?默认情况下,编译器将生成类名称 YourFileKt。...用作表达式,如果有类型不匹配,编译器将会出错。...第三周学习小结: 本周主要讨论一些基本 Kotlin 特性,如运算符重载,内联,运算符重载,懒加载,以及非常强大 inLine,并展示了使用 Android KTX 处理内容值,捆绑包和回调如何编写更简洁代码...扩展功能一些特性: 不是成员函数 不要以任何方式修改原始类 通过静态类型信息解决编译时间 会被编译为静态函数 不要多态性 例如:String.toUri() Day 27

2.2K30

Kotlin | 作用域函数

Kotlin 标准库包含了几个特殊函数,其目的是在调用对象上下文环境(context)中执行代码块。当你在提供了 lambda 表达式对象上调用此类函数,它会形成一个临时作用域。...在此作用域内,你可以在不使用其名称情况下访问该对象,这些函数被称为作用域函数。在 Kotlin 中,作用域函数总共有五个,分别是:let、run、with、apply、also。...let 可用于在调用链结果上调用一个多个函数。...this") println("It contains $size elements") } } with 一个用例是引入一个辅助对象,我们可以方便使用此对象属性函数来计算值...觉得这就是 Kotlin 一种优点和缺点体现,优点是它很灵活,灵活不像 Native 语言,缺点是它太灵活了,太多语法糖导致你容易忘记写这些代码要实现目的,所以,虽然作用域函数是使代码更简洁一种方法

90630

Kotlin概述与Java比较

Kotlin语言好处 Kotlin编译为JVM字节码JavaScript – 像Java一样,Bytecode也是Kotlin程序编译格式。...在Kotlin系统中,系统只拒绝编译尝试分配返回null代码考虑以下示例 – 代码审查不是问题 – 科特林更注重可读性语法,所以代码审查不是一个问题,它们仍然可以由那些不熟悉语言团队成员完成...Kotlin语言特点 十亿美元错误是正确。 如上所述,Kotlin避免了空指针异常。 如果我们尝试分配返回null到变量函数,那么它将不会编译。...我们必须在变量类型之后添加“?”。 考虑以下示例 – Kotlin编译也会在运行时抛出NullPointerException失败。...意味着Kotlin提供了扩展具有新功能能力,而无需继承类。这是通过扩展功能完成。要声明一个扩展功能,我们需要用一个接收器类型,即被扩展类型来加上它名字。

2.9K10

号称取代 Java Kotlin 语言到底是什么鬼?

从个人角度赞成 IDEA 做法因为想不到有哪些应用场景需要遮蔽方法参数。 类型推断 在Kotlin中,当你声明一个var或是val,你通常会让编译器从右边表达式类型中猜测变量类型。...operator } 第三种方法:让 Kotlin 做局部变量类型推断如何?...首先,你需要在名称类型之间加入这个多余冒号。这个额外角色目的是什么?为什么名称与其类型要分离?不知道。可悲是,这让你在 Kotlin 工作变得更加困难。...类型推断 Kotlin 类型推断无处不在,作者说 Java 10 同样可以简直是在开玩笑。 Kotlin 方式超越了推断局部变量类型返回表达式体函数类型。...不知道作者在使用什么 IntelliJ,但我使用变量名称类型都能够自动补全。对于参数,IntelliJ 甚至会给你提供相同类型名称类型建议,这实际上比 Java 更好。

2.2K50

Kotlin | 6.Kotlin 类型系统

{ // 异常在这一行:告诉编译知道这个值不为null,如果错了准备好了接收这个异常 val sNotNull: String = s!!...或者 0xbdcL * 使用前缀 0b0B 表示二进制字面值:0b000000101 * * */ // 初始化一个类型已知和变量...} } 总结 Kotlin 对可空类型支持,可以帮助我们在编译期,检测出潜在NullPointerException错误Kotlin 提供了像安全调用(?.)...Java 中类型Kotlin 中被解释成平台类型,允许开发者把它们当作可空非空来对待。 表示基本数字类型(如 Int )看起来用起来都像普通类,但通常会被编译成 Java 基本数据类型。...当你在 Kotlin 中继承 Java 类或者实现 Java 接口,你需要仔细考虑参数可空性和可变性。 KotlinArray 类就像普通泛型类 但它会被编译成 Java 数组。

2.3K10

Kotlin for Java Developers 学习笔记

(0)} “变量”分为 val 和 var,val 是只读 Kotlin 是静态类型语言,每一个变量都会有自己类型,但是我们可以在代码中省略基本类型编译器会自动推断 var s = "abc"...string,这是一个编译错误 var string = 1 string = "abc" // NOT ALLOWED是不允许,我们不能把 val 不对数据做任何强加限制,仍然可以改变其引用数据...Pointer Exception 变成编译错误,而不是运行时错误 val s1: String = "always not null" // 不可以 = null val s2: String?...对其修饰,这样这个类型就不再需要是 nullable 了 lateinit myData: MyData // ... myData.foo 如果因为某些原因,这个成员没有被正确初始化,我们会得到一个运行时错误...equals,但是当类使用 data 修饰,会自动实现一个比较域成员 equals,于是就会得到 true Kotlin 只会使用主构造器中属性来实现 equals,不会使用类在其他部分定义变量

1.7K10

减少崩溃,提升体验 | 使用 Kotlin 打造优质应用

在使是否可为 null 成为类型系统一部分后,您不必再依赖内存和对代码库了解,也不必依赖编译警告 (如果用 @Nullable 注解字段/参数)。...由于是否可为 null 被强制执行,您将得到编译错误,而不仅仅是警告。官方文档 介绍了处理是否可为 null 方式。 避免常见问题 开发者会无意中引入一些问题,有些问题可能非常微妙且难以察觉。...然而,经常会发生忘记实现其中一个方法或者在类中添加新属性忘记更新。当处理仅用于保存数据,请使用 Kotlin 数据类。...首先,Kotlin 没有原语类型,它使用是 Int  String 这样类;因此您不需要在对象和原语类型之间做这种区分,因为每一个事物都是一个对象。...在 Kotlin 中,如果您使用 when 作为表达式,就可以依靠编译器来处理: 如果您没有覆盖所有可能分支,会出现一个编译错误。 结论 应用稳定性对用户和品牌至关重要。

1.4K10

开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

用户只需要在一个特殊 .sq 文件中编写自己 SQL 语句,并给 SQL 语句起一个名字,KCP 就可以在工程编译构建对 SQL 语句进行语法检查及静态类型校验,并生成一个函数。...interface abstract class,不同 SQL 语句类型关系有所不同,这些约束真正实现在其子类型当中。...为了使这一步操作更方便,希望 SQLlin 可以根据用户期待序列化与反序列化类型自动生成 Table 单例,以及其内部列名属性。...3.3.4 如何实现查询结果反序列化 在纯 Android 库开发中,我们通常会使用反射将某种格式数据中某个字段值映射到与它名称相同 class 中某个属性,从而生成出该 class 对象...利用 Kotlin 语法规则可以在很大程度上保证在编译期间暴露出我们编写 SQL 错误,并在绝大部分情况下阻止错误 SQL 语句代码通过编译

1.6K40

Kotlin Vocabulary | 内联类 inline class

*特定条件和情况 这篇博客描述了一个 Kotlin 试验性功能,它还在调整之中。本文基于 Kotlin 1.3.50 撰写。 类型安全帮助我们防止出现错误以及避免回过头去调试错误。...通过 Kotlin 内联类您可以创建包装类型 (wrapper type),却不会有额外性能消耗。这是 Kotlin 1.3 中添加实验性功能。内联类只能有一个属性。...在编译,内联类会在可能地方被替换为其内部属性 (取消装箱),从而降低常规包装类性能成本。对于包装对象是原生类型情况,这尤其重要,因为编译器已经对它们进行了优化。...public final void walkDog_Mu_n4VY(**long** doggoId) { } 复制代码 当需要一个对象Kotlin 编译器将使用原生类型包装版本,从而每次都创建一个对象...当需要一个对象Kotlin 编译器将使用原生类型包装版本,从而每次都创建一个对象,例如: 可空对象 fun pet(doggoId: DoggoId?)

63730

Kotlin Vocabulary | 内联类 inline class

*特定条件和情况 这篇博客描述了一个 Kotlin 试验性功能,它还在调整之中。本文基于 Kotlin 1.3.50 撰写。 类型安全帮助我们防止出现错误以及避免回过头去调试错误。...通过 Kotlin 内联类您可以创建包装类型 (wrapper type),却不会有额外性能消耗。这是 Kotlin 1.3 中添加实验性功能。内联类只能有一个属性。...在编译,内联类会在可能地方被替换为其内部属性 (取消装箱),从而降低常规包装类性能成本。对于包装对象是原生类型情况,这尤其重要,因为编译器已经对它们进行了优化。...public final void walkDog_Mu_n4VY(**long** doggoId) { } 当需要一个对象Kotlin 编译器将使用原生类型包装版本,从而每次都创建一个对象...当需要一个对象Kotlin 编译器将使用原生类型包装版本,从而每次都创建一个对象,例如: 可空对象 fun pet(doggoId: DoggoId?)

10210

Kotlin 和 Checked ExceptionKotlin 和 Checked Exception

不知道这个术语有什么标准中文翻译,为了避免引起定义混乱,下文就把它简称为“CE”好了。 先来科普一下 CE 到底是什么吧。Java 要求你必须在函数类型里面声明它可能抛出异常。... CE 是一个错误,为什么它不解决问题,却带来了麻烦。...注意到了吗,这也就是你写 Java 代码,能写出最糟糕异常处理代码!因为不知道 foo 函数里面会有什么异常出现,所以你 catch 语句里面也不知道该做什么。...Java 编译静态类型检查会告诉你,在什么地方必须写 try-catch,或者加上 throws 声明。...一来是因为不想让人感觉在“控制”他们,如何看待一个东西是他们自由,是否采用一个东西是他们自己决定。二来是因为还没有时间和机会,去用 Kotlin 来做实际项目。

69520

绝对干货 | Kotlin内联类工作原理及使用案例,看完你会回来谢

在运行时,将尽可能使用内联类包装类型而不使用其包装。这类似于Java框式类型,例如IntegerBoolean,只要编译器可以这样做,它们就会被表示为它们对应原始类型。...这正是Kotlin中内联类一大卖点:内联类,除非绝对必要,否则类本身不会在字节码中使用。内联类大大减少了运行时空间开销。 运行时 在运行时,可以将内联类表示为包装类型和基础类型。...最后,您可以看到box_impl和unbox_impl函数,可能如您所期望,它们目的在于拆装箱操作。现在,让我们看看在代码中如何使用内联类。...我们已经注意到,内联类不能具有带有幕后字段多个属性。但是,它们可以具有属性和函数形式简单计算成员。我们可以为我们用例创建一个内联类,该类包装原始String并提供按需分析我们方法属性。...,上述问题已得到解决

1.3K30

IDEA 2022.1 重磅发布!追不动了~

罗奇奇 | OSC开源社区(ID:oschina2013) IntelliJ IDEA 2022.1 正式发布了,熟悉朋友都知道,通常都会第一间更新到最新版本。...它支持现代语言构造函数,例如密封类型和模式匹配,具有更好字符串反编译切换功能,提供类型注释并检测公共常量。...Kotlin 支持 IntelliJ IDEA 2022.1 支持 Kotlin 1.6.20,因此最新 Kotlin 语言功能,例如支持并行编译、上下文接收器原型以及跨所有 Kotlin 目标的更好代码共享...gRPC 反射支持 当项目中存在描述 gRPC 服务 .proto 文件,IntelliJ IDEA Ultimate 现在为服务名称、方法名称和请求正文选项提供代码补全。...服务视图中 描述资源操作 “服务”视图中所有资源都有一个“描述资源”操作,可以从上下文菜单中调用它使用工具栏按钮。

2.5K20

绝对干货 | Kotlin内联类工作原理及使用案例,看完你会回来谢

在运行时,将尽可能使用内联类包装类型而不使用其包装。这类似于Java框式类型,例如IntegerBoolean,只要编译器可以这样做,它们就会被表示为它们对应原始类型。...这正是Kotlin中内联类一大卖点:内联类,除非绝对必要,否则类本身不会在字节码中使用。内联类大大减少了运行时空间开销。 运行时 在运行时,可以将内联类表示为包装类型和基础类型。...最后,您可以看到box_impl和unbox_impl函数,可能如您所期望,它们目的在于拆装箱操作。现在,让我们看看在代码中如何使用内联类。...我们已经注意到,内联类不能具有带有幕后字段多个属性。但是,它们可以具有属性和函数形式简单计算成员。我们可以为我们用例创建一个内联类,该类包装原始String并提供按需分析我们方法属性。...,上述问题已得到解决

55720
领券