Kotlin Reference: Sealed Classes
密封类(Sealed Class)用于表示受限制的类层级结构,比如约束一个值的类型只能是某个有限类型集合中的类型之一,而不能是其他类型。某种意义上,这类似于枚举的扩展:枚举类型可以取的值也是受限制的,但每个枚举常量仅作为单个实例存在,而密封类的子类可以有多个实例,且可以具有状态。 通过在类名前添加 sealed 关键字来声明密封类,密封类可以有子类,但所有的子类必须与父密封类位于同一个文件…
Read more
learn, build, evaluate
密封类(Sealed Class)用于表示受限制的类层级结构,比如约束一个值的类型只能是某个有限类型集合中的类型之一,而不能是其他类型。某种意义上,这类似于枚举的扩展:枚举类型可以取的值也是受限制的,但每个枚举常量仅作为单个实例存在,而密封类的子类可以有多个实例,且可以具有状态。 通过在类名前添加 sealed 关键字来声明密封类,密封类可以有子类,但所有的子类必须与父密封类位于同一个文件…
Read more
我们经常会创建一些仅用于存储数据的类,在这些类中,通常会根据数据派生出一系列标准的功能。Kotlin 称之为数据类(Data Class),使用 data 标记: [code lang=”kotlin”]data class User(val name: String, val age: Int)[/code] 编译器会自动根据主构造器中声明的所有属性,为数据类生成…
Read more
Kotlin 提供了类似 C# 和 Gosu 中对类进行扩展的功能,可以在不继承类或使用特定设计模式(如修饰者)的情况下,为类添加新的功能。这是通过名为扩展(Extensions)的特殊声明实现的。Kotlin 支持扩展函数和扩展属性。 Extension Functions 通过在函数名前添加接收者类型(Receiver Type,即被扩展的类型),可以声明扩展函数。如下面为 Mutab…
Read more
类、object、接口、构造器、函数、属性及其 setter 可以具有可见性修饰符(属性的 getter 始终与属性本身具有同样的可见性)。Kotlin 中有四种可见性修饰符:private、protected、internal 和 public,如果没有使用显式的修饰符,则默认的可见性为 public。 Packages 函数、属性、类、object 和接口可以声明在顶层,也就是直接在包…
Read more
Kotlin 中的接口和 Java 8 非常相似,可以拥有抽象方法和方法实现。接口与抽象类的区别在于接口不能储存状态。接口可以具有属性,但属性需要是抽象的,或者仅提供访问器的实现。 使用 interface 关键字声明接口: [code lang=”kotlin”]interface MyInterface { fun bar() fun foo() { // op…
Read more
Declaring Properties Kotlin 中的类可以具有属性。可以使用 var 关键字声明可变(Mutable)属性,或者使用 val 关键字声明只读(Read-Only)属性。 [code lang=”kotlin”]class Address { var name: String = … var street: String = ̷…
Read more
Classes Kotlin 中使用关键字 class 声明类: [code lang=”kotlin”]class Invoice { }[/code] 类的声明包括类名、类头(Class Header,用于指定类型参数、主构造器等)和用花括号包围的类体(Class Body)。类头和类体都是可选的,如果没有类体,则花括号也可以省略。 [code lang=̶…
Read more
Kotlin 有三种结构跳转表达式: return:默认返回最近一层的函数或匿名函数。 break:结束最近一层的循环。 continue:进行到最近一层循环的下一步。 这三个表达式都可以用在其他表达式中,如: [code lang=”kotlin”]val s = person.name ?: return[/code] 以上三个表达式的类型为 Nothing…
Read more
If Expression Kotlin 中的 if 是一个表达式,具有返回值。Kotlin 中没有三元操作符(condition ? then : else),因为 if 完全可以胜任这个角色。 [code lang=”kotlin”]// Traditional usage var max = a if (a < b) max = b // With else…
Read more
可以在源文件的开头进行包声明: [code lang=”kotlin”]package foo.bar fun baz() {} class Goo {} // …[/code] 源文件中的全部内容(如类和函数)都包含在所声明的包中。在上面的例子中,函数 baz() 的全名为 foo.bar.baz,类 Goo 的全名为 foo.bar.Goo。 如…
Read more