首页
Li Tao - 李涛
取消

Kotlin学习笔记(13) - 委托

一、委托 委托设计模式是一个很好的实现继承的替代方案,Kotlin能够原生的支持这种设计模式。委托模式可以通过 by 关键字在类中使用,也可以通过标准库中提供的几个委托类来简化一些常见的模式。 //EnhancedPrinter 类委托了 Printer 接口的实现给 standardPrinter 对象。 interface Printer { fun printMessage...

Kotlin学习笔记(12) - 对象表达式与对象声明

一、对象表达式 用于创建匿名对象的语法 val obj = object : SomeType(parameters), AnotherType { // 对象表达式的成员 } //如果没有任何操作或超类的话,也可以简化为 val helloWorld = object { } 二、使用场景 1. 创建匿名对象 //当你只需要一个临时的、单个的对象,并不打算在其...

Kotlin学习笔记(11) - 嵌套类/枚举类/inline value class

一、嵌套类/内部类 1. 嵌套类 嵌套类不能访问外部成员 与java的静态内部类相似 class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = Outer.Nested().foo() // == 2 还可以进行类与接口的...

Kotlin学习笔记(10) - 密封类/接口

一、密封类 在Kotlin中,密封类(Sealed Class)是一种特殊的类别,用于表示受限的继承结构。密封类在某种程度上类似于枚举,但它可以包含多个实例。最常见的用例就是能够更好的与when函数一起使用。 //kotlin 1.1 之前子类必须在密封类内部 sealed class Result { class Success(val value: Int) : Result...

Kotlin学习笔记(9) - 数据类

一、数据类 Kotlin中提供了一种特殊的用于数据存储的类,使用data关键字进行创建 data class Person(val name: String, val age: Int) 也可以定义好默认参数,直接使用无参的构造 data class Point(val x: Int = 0, val y: Int = 0) 数据类会自动为我们生成以下常用方法 equ...

Kotlin学习笔记(8) - 扩展

一、扩展函数 Kotlin中可以对一个类或接口扩展新功能而无需继承或类似Decorator对设计模式,例如我们希望对一些三方库中的类或接口添加新方法,调用方式可以与原始方法一致。 定义时用适用被扩展类型为前缀加扩展的方法名即可,函数内部this指扩展类 fun MutableList<Int>.swap(index1: Int, index2: Int) { val...

Kotlin学习笔记(7) - 可见修饰符

一、修饰符 Kotlin中有四种可见修饰符,可为类、对象、接口、构造函数、方法、属性及属性的访问器添加可见修饰符 private:当前文件可见 protected:与private类似,但它在子类中也是可见的。不适用于顶层声明,如顶层类、顶层属性、顶层方法等 internal:当前模块可见 public: 默认值,任何位置可见 二、修饰符覆盖 如果去覆盖一个pro...

Kotlin学习笔记(6) - 接口

一、接口声明 Kotlin中的接口可以既包含抽象方法的声明也包含实现,与抽象类不同之处在于不能保存状态。接口内可以定义属性,但这些属性必须是抽象的或提供了访问器的实现(getter) interface MyInterface { var age:Int // abstract val name: String get() = "lee" fun ...

Kotlin学习笔记(5) - 属性

一、属性声明 Kotlin 中的属性使用var声明为可变属性,val声明位只读属性 class Address { var name: String = "Holmes, Sherlock" val street: String = "Baker" var city: String = "London" var state: String? = null ...

Kotlin学习笔记(4) - 继承

## 一、继承 在Kotlin中所有类的公共超类是Any,对于没有声明超类的默认会继承Any Any具有三个方法equals(),hashCode(),toString() 默认情况下Kotlin类是final的,不允许继承,如果需要被继承可以使用open关键字进行修饰 open class Base // Class is open for inheritance 显式的继承超...