Kotlin Reference: Destructuring Declarations

  有时候需要把一个对象解构(Destructure)为一系列变量,如: 上面的语法称为解构声明(Destructuring Declaration),解构声明可以一次性创建多个变量。我们声明了两个变量:name 和 age,可以单独地使用它们:   解构声明会编译为如下的代码: 这里的 component1() 和 component2() 函数是在 Kotlin 中广泛使用另一个的约定规则(其…
Read more

Kotlin Reference: Inline Functions

  使用高阶函数会引入一定的运行时损耗:每一个函数都是一个对象,并且要获取闭包,即在函数内访问外部函数作用域的变量。(对函数对象和类的)内存分配和虚调用都会引入运行时开销。   但在很多情况下,使用内联 Lambda 表达式可以消除此种开销,下面给出的函数很好地展现了这一情况,即 lock() 函数可以很容易地在调用处内联,考虑下面的场景:   编译器不会为该参数创建一个函数对象再进行调用,而是会…
Read more

Kotlin Reference: Higher-Order Functions and Lambdas

Higher-Order Functions   高阶函数指的是以函数作为参数或返回值的函数。lock() 函数是一个很好的例子,它接受一个对象和一个函数作为参数,获取对象的锁后,执行函数并释放锁: 来看一下上面的代码:body 是函数类型() -> T,这个函数没有参数,有一个类型为 T 的返回值。它被 lock 保护,在 try 块中被调用,其结果由 lock() 函数返回。   如果要…
Read more

Kotlin Reference: Functions

Function Declarations   在 Kotlin 中使用 fun 关键字定义函数: Function Usage   函数的调用和传统方法一样:   使用点表示法(.)调用成员函数: Infix notation   满足以下条件时,也可以使用中缀表示法调用函数: 是成员函数或扩展函数 只有一个参数 使用 infix 关键字标记 Parameters   函数的参数使用 Pasca…
Read more

Kotlin Reference: Delegated Properties

  对于一些通用的属性,比起每次都在需要的时候进行手动实现,更好的方法是实现一次并把它放进库里,此类属性如: 延迟(Lazy)属性:仅在第一次访问时进行计算, 可观察(Observable)属性:属性发生变动时通知监听者, 在映射(Map)中存储属性,而不是把属性存储到单独的字段。   Kotlin 提供了委托属性(Delegated Property)来满足此种(及其他)场景:   委托属性的语…
Read more

Kotlin Reference: Delegation

  实践证明,委托模式(Delegation Pattern)是实现继承的一种有效的替代方式,Kotlin 原生支持委托模式,不需要任何样板代码。下面的代码中,Derived 类实现了接口 Base,并将其所有的公有方法委托给了一个特定的对象:   Derived 类的超类列表中的 by 子句表示 b 将被保存到 Derived 对象的内部,编译器会生成 Base 的所有方法并转发给 b。   注…
Read more

Kotlin Reference: Object Expressions and Declarations

  有时候我们想对一个类进行些许修改,而又不想显式地声明一个新的子类。Java 使用匿名内部类(Anonymous Inner Class)的方式应对这种场景,Kotlin 使用对象表达式(Object Expression)和对象声明(Object Declaration)进一步拓展了这个概念。 Object expressions   要创建继承了某个(或多个)其他类型的匿名内部类,可以使用如…
Read more

Kotlin Reference: Enum Classes

  枚举类最基础的应用是实现类型安全的枚举: 每一个枚举常量都是一个对象,每个枚举常量之间以逗号分隔。 1. Initialization   由于每一个枚举都是枚举类的实例,故而它们可以被初始化: 2. Anonymous Classes   枚举常量可以声明自己的匿名类: 匿名类可以有自己的方法,也可以覆盖父类的方法。需要注意的是,如果枚举类中定义了成员,就需要使用分号来分隔枚举常量定义和成员…
Read more

Kotlin Reference: Nested Classes

  类可以嵌套进其他的类中: 【注】Kotlin 的嵌套类默认不携带外部类的引用,相当于 Java 的静态嵌套类。 Inner classes   可以把类标记为 inner,这样该类就可以方位外部类的成员。内部类会携带外部类对象的引用:   关于在内部类中消除 this 歧义的方法,请参考限定的 this 表达式 。 Anonymous inner classes   使用对象表达式(Objec…
Read more

Kotlin Reference: Generics

  Kotlin 的类可以具有类型参数,就像 Java 一样:   一般来说,要创建这种类的实例,需要提供类型参数:   但如果类型参数可以被推断出来,例如通过构造器参数或其他途径,则可以省略类型参数: Variance   通配符是 Java 类型系统中最复杂部分之一(见 Java Generics FAQ),Kotlin 中没有通配符,取而代之的是声明处变型(Declaration-Site …
Read more