Kotlin Cheat Sheet: 带值的枚举类和转换
1. 为枚举常量添加额外信息 在 Kotlin 中,可以通过枚举类来实现类型安全的枚举,如: [code lang=”kotlin”]enum class Size { SMALL, MEDIUM, LARGE; }[/code] 每一个枚举常量都是一个对象,是枚举类的一个实例,可以为枚举类添加属性并进行初始化,这样就可以得到带有属性的枚举常量: [code lan…
Read more
learn, build, evaluate
1. 为枚举常量添加额外信息 在 Kotlin 中,可以通过枚举类来实现类型安全的枚举,如: [code lang=”kotlin”]enum class Size { SMALL, MEDIUM, LARGE; }[/code] 每一个枚举常量都是一个对象,是枚举类的一个实例,可以为枚举类添加属性并进行初始化,这样就可以得到带有属性的枚举常量: [code lan…
Read more
使用类型别名可以为已有类型提供了替代的名称。如果某个类型的名称很长,可以为其引入一个更短的名称,以便于使用。 类型别名可以缩短过长的泛型类型,举例来说,通常希望缩短集合类型: [code lang=”Kotlin”]typealias NodeSet = Set<Network.Node> typealias FileTable&…
Read more
建造者(Builder) 的概念在 Groovy 社区中颇为流行。建造者允许以半声明式的形式定义数据,常用于生成 XML、UI 元素布局、描述 3D 场景等。 Kotlin 提供的类型检查建造者适用于大多数用例,比 Groovy 中的动态类型的实现更加诱人。 Kotlin 也支持动态类型建造者,以满足其他用例的需要。 A type-safe builder example 考虑下面…
Read more
反射是用于在运行时内省程序内部结构的一组语言和库的功能。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