美文网首页
kotlin学习日记(5)

kotlin学习日记(5)

作者: 海东青_fb7a | 来源:发表于2020-11-12 15:56 被阅读0次
  • kotlin-代理属性(by)

代理模式
客户端使用一个代理对象实现对真实对象的访问,代理对象和真实对象实现相同的接口,代理对象持有真实对象

Kotlin中,委托的实现依靠于关键字 by ,by表示将实现接口的真实对象(by后边的实例)保存在代理对象的内部,比如SportsManager类继承于ISports接口,并可以ISports接口的所有的 public 方法委托给一个指定的对象。

interface ISports {
  fun doSports()
}
class SwimForSports: ISports{
override fun doSports() {
  println("do swim")
}
}
class SportsManager(sport: ISports): ISports by sport

fun main(args: Array<String>) {
  val swimSports: SwimForSports = SwimForSports()
  SportsManager(swimSports).doSports()// Log:do swim
}
  • by lazy :
    延迟加载属性(lazy property): 属性值只在初次访问时才会计算。var类型属性不能设置为延迟加载属性,因为在lazy中并没有setValue(…)方法
    by lazylateinit 不同的是 在使用lateinit 定义的变量前 一定会给他一个实例 保证他不会是空对象 而 by lazy 则是在第一次使用时 初始化对象
class Bean {
    val str by lazy {
        println("Init lazy")//只有第一次初始化走这步
        "Hello World"
    }
}

在Android开发中 我们会常常用的 by lazy 放一段 BaseActivity 延迟加载 初始化 DataBinding 和 ViewModel 操作

  • 属性委托
    所谓的委托属性,就是对其属性值的操作不再依赖于其自身的getter()/setter()方法,是将其托付给一个代理类,从而每个使用类中的该属性可以通过代理类统一管理,再也不用在每个类中,对其声明重复的操作方法。
val/var <property name>: <Type> by <expression>

by关键字之后的表达式就是委托,属性的get()方法(以及set() 方法)将被委托给这个对象的 getValue()和setValue()方法.属性委托不必实现任何接口, 但必须提供 getValue() 函数(对于 var属性,还需要 setValue() 函数)。

  • Sealed class类

Sealed class(密封类) 是一个有特定数量子类的类,看上去和枚举有点类似,所不同的是,在枚举中,我们每个类型只有一个对象(实例);而在密封类中,同一个类可以拥有几个对象。

Sealed class(密封类)的所有子类都必须与密封类在同一文件中

Sealed class(密封类)的子类的子类可以定义在任何地方,并不需要和密封类定义在同一个文件中

Sealed class(密封类)没有构造函数,不可以直接实例化,只能实例化内部的子类

sealed class SealedClass{
    class SealedClass1():SealedClass()
    class SealedClass2():SealedClass()
    fun hello(){
        println("Hello World ... ")
    }
}
fun main(args:Array<String>){
    var sc:SealedClass = SealedClass()//这里直接编译报错
}
fun main(args:Array<String>){
    var sc:SealedClass = SealedClass.SealedClass1()//只能通过密封类内部的子类实例化对象,这时就可以执行里面的方法了
    sc.hello()
}

相关文章

  • kotlin学习日记(5)

    kotlin-代理属性(by) 代理模式客户端使用一个代理对象实现对真实对象的访问,代理对象和真实对象实现相同的接...

  • Kotlin学习5

    继承与重载的open关键字 类默认都是封闭(final)的,要让某个类开放继承,必须使用open关键字修饰他 类型...

  • 【Kotlin学习日记】Day8:类和继承

    大家好,欢迎加入小李君的Kotlin学习之旅。今天是小李君学习 Kotlin 的第八天。 写了几天日记,小李君发现...

  • Kotlin学习之Kotlin初识

    Kotlin学习之Kotlin初识 @(Kotlin学习) 一、什么是Kotlin? Kotlin,是JetBra...

  • Kotlin学习笔记:类和接口

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:概述

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin 学习笔记:基本语法和函数

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:注解和反射

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:泛型

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

  • Kotlin学习笔记:类型系统

    Kotlin学习笔记:概述Kotlin学习笔记:基本语法和函数Kotlin学习笔记:类和接口Kotlin学习笔记:...

网友评论

      本文标题:kotlin学习日记(5)

      本文链接:https://www.haomeiwen.com/subject/uqbppktx.html