Kotlin Reference: Reflection

  反射是用于在运行时内省程序内部结构的一组语言和库的功能。Kotlin 的函数和属性是语言的一等公民,对其的内省(在运行时获取属性或函数的名称或类型)与函数式或响应式的风格密切相关。   在 Java 平台上,反射功能所需的运行时组件是以单独的 JAR 文件的形式发布的(kotlin-reflect.jar),这是为了减小不使用反射功能的应用的运行库尺寸。如果你要使用反射,请确保把该 .jar …
Read more

Kotlin Reference: Annotations

Annotation Declaration   注解可以为代码添加元数据。在类前使用 annotation 修饰符声明注解:   在注解类上使用元注解可以为注解添加额外的属性: @Target 指定可以被注解的元素类型(类、函数、属性、表达式等); @Retention 指定注解是否被存储到编译后的类文件中,以及是否在运行时能通过反射可见(默认二者都为是); @Repeatable 允许在一个元…
Read more

Kotlin Reference: Exceptions

Exception Classes   在 Kotlin 中,所有的异常类都是 Throwable 的子类。每一个异常都有一个消息、调用栈和一个可选的原因。   使用 throw 表达式抛出异常对象:   使用 try 表达式捕获异常:   可以有零个或多个 catch 代码块,finally 块可以省略,但必须至少有一个 catch 或 finally。 Try is an expression…
Read more

Kotlin Reference: Null Safety

Nullable types and Non-Null Types   Kotlin 的类型系统致力于从代码中消除空引用的风险(又名 The Billion Dollar Mistake)。   在包括 Java 在内的很多语言中,一个最常见的陷阱就是访问一个空引用的成员,继而导致空引用异常,等效于 Java 中的 NullPointerException,缩写为 NPE。   Kotlin 的类…
Read more

Kotlin Reference: Operator overloading

  Kotlin 允许我们为类型上的一组预定义的操作符提供实现。这些操作符具有固定的符号表现形式(如 + 或者 *)和固定的优先级。可以通过固定名称的成员函数或扩展函数来为对应类型(二元操作符左值的类型,或一元操作符的参数类型)提供操作符的实现。重载操作符的函数需要使用 operator 修饰符标记。   下面描述了重载不同操作符的约定。 Unary operations Unary prefix…
Read more

Kotlin Reference: Equality

  Kotlin 中有两种类型的相等: 引用相等(两个引用指向同一个对象) 结构相等(检查 equals()) Referential equality   使用 === 操作(及对应的否定形式 !==) 检查引用相等。当且仅当 a 和 b 指向同一个对象时,a === b 的值为 true。 Structural equality   使用 == 操作(及对应的否定形式 !=) 检查结构相等。按…
Read more

Kotlin Reference: This Expression

  使用 this 表达式表示当前的接收者(Receiver): 在类的成员中,this 指的是该类的当前的对象。 在扩展函数 和 带接收者的函数字面值 中,this 指的是在点(.)左边传递的接受者参数。   如果 this 不具有限定词,则它指的是自身所在的最内层的作用域。如果要引用外层作用域,则需要使用标签限定符(Label Qualifier): Qualified this   如果想要…
Read more

Kotlin Reference: Type Checks and Casts

is and !is Operators   使用 is(和其否定形式 !is)可以在运行时检查某个对象是否符合给定的类型: Smart Casts   在 Kotlin 中,很多情况下并不需要使用显式的转换操作符,因为编译器会记录对不可变(Immutable)值的 is 检查结果,并在需要时自动插入(安全的)转换:   如果否定的检查会导致返回,编译器也聪明到可以判断转换是否安全:   又或者转…
Read more

Kotlin Reference: Ranges

  可以使用 rangeTo() 函数(对应操作符为 ..)编写区间表达式(Range Expression),并使用 in 和 !in 来补充。区间可以用于所有可比较的类型,但对于整型基本类型(Integral Primitive Type)的实现有优化。下面是一些使用区间的例子:   整型区间(IntRange、LongRange、CharRange)有一个额外的功能:它们可以被迭代。编译器会…
Read more

Kotlin Reference: Collections

  Kotlin 会区分可变(Mutable)和不可变(Immutable)集合(如 List、Set、Map 等),这一点与其他语言不同。通过对集合能否被修改进行精确的控制,有助于消除 Bug 和设计优良的 API。   首先,需要理解可变集合的只读视图(View)和一个真正不可变集合间的区别。二者都很容易创建,但在类型系统中并不会体现出区别,你可以根据实际需要来决定是否对二者进行区分。   K…
Read more