Kotlin Reference: Reflection
反射是用于在运行时内省程序内部结构的一组语言和库的功能。Kotlin 的函数和属性是语言的一等公民,对其的内省(在运行时获取属性或函数的名称或类型)与函数式或响应式的风格密切相关。 在 Java 平台上,反射功能所需的运行时组件是以单独的 JAR 文件的形式发布的(kotlin-reflect.jar),这是为了减小不使用反射功能的应用的运行库尺寸。如果你要使用反射,请确保把该 .jar …
Read more
learn, build, evaluate
反射是用于在运行时内省程序内部结构的一组语言和库的功能。Kotlin 的函数和属性是语言的一等公民,对其的内省(在运行时获取属性或函数的名称或类型)与函数式或响应式的风格密切相关。 在 Java 平台上,反射功能所需的运行时组件是以单独的 JAR 文件的形式发布的(kotlin-reflect.jar),这是为了减小不使用反射功能的应用的运行库尺寸。如果你要使用反射,请确保把该 .jar …
Read more
Annotation Declaration 注解可以为代码添加元数据。在类前使用 annotation 修饰符声明注解: [code lang=”kotlin”]annotation class Fancy[/code] 在注解类上使用元注解可以为注解添加额外的属性: @Target 指定可以被注解的元素类型(类、函数、属性、表达式等); @Retention 指…
Read more
Exception Classes 在 Kotlin 中,所有的异常类都是 Throwable 的子类。每一个异常都有一个消息、调用栈和一个可选的原因。 使用 throw 表达式抛出异常对象: [code lang=”kotlin”]throw MyException(“Hi There!”)[/code] 使用 try 表达式捕获异常:…
Read more
Nullable types and Non-Null Types Kotlin 的类型系统致力于从代码中消除空引用的风险(又名 The Billion Dollar Mistake)。 在包括 Java 在内的很多语言中,一个最常见的陷阱就是访问一个空引用的成员,继而导致空引用异常,等效于 Java 中的 NullPointerException,缩写为 NPE。 Kotlin 的类…
Read more
Kotlin 允许我们为类型上的一组预定义的操作符提供实现。这些操作符具有固定的符号表现形式(如 + 或者 *)和固定的优先级。可以通过固定名称的成员函数或扩展函数来为对应类型(二元操作符左值的类型,或一元操作符的参数类型)提供操作符的实现。重载操作符的函数需要使用 operator 修饰符标记。 下面描述了重载不同操作符的约定。 Unary operations Unary prefix…
Read more
Kotlin 中有两种类型的相等: 引用相等(两个引用指向同一个对象) 结构相等(检查 equals()) Referential equality 使用 === 操作(及对应的否定形式 !==) 检查引用相等。当且仅当 a 和 b 指向同一个对象时,a === b 的值为 true。 Structural equality 使用 == 操作(及对应的否定形式 !=) 检查结构相等。按…
Read more
使用 this 表达式表示当前的接收者(Receiver): 在类的成员中,this 指的是该类的当前的对象。 在扩展函数 和 带接收者的函数字面值 中,this 指的是在点(.)左边传递的接受者参数。 如果 this 不具有限定词,则它指的是自身所在的最内层的作用域。如果要引用外层作用域,则需要使用标签限定符(Label Qualifier): Qualified this 如果想要…
Read more
is and !is Operators 使用 is(和其否定形式 !is)可以在运行时检查某个对象是否符合给定的类型: [code lang=”kotlin”]if (obj is String) { print(obj.length) } if (obj !is String) { // same as !(obj is String) print(“N…
Read more
可以使用 rangeTo() 函数(对应操作符为 ..)编写区间表达式(Range Expression),并使用 in 和 !in 来补充。区间可以用于所有可比较的类型,但对于整型基本类型(Integral Primitive Type)的实现有优化。下面是一些使用区间的例子: [code lang=”kotlin”]if (i in 1..10) { // equi…
Read more
Kotlin 会区分可变(Mutable)和不可变(Immutable)集合(如 List、Set、Map 等),这一点与其他语言不同。通过对集合能否被修改进行精确的控制,有助于消除 Bug 和设计优良的 API。 首先,需要理解可变集合的只读视图(View)和一个真正不可变集合间的区别。二者都很容易创建,但在类型系统中并不会体现出区别,你可以根据实际需要来决定是否对二者进行区分。 K…
Read more