• kotlin学习笔记记录


    定义变量

    var k:String?=null

    后面的?表示可以赋值为null

     mHandler?.post()

    表示mHandler为空就不执行后面的

    mHandler!!.post()

    表示mHandler为空就抛出异常

    lateinit的作用:延迟初始化
    具体来讲,这个关键字告诉编译器,我无法声明的时候就初始化,但是我保证我在使用前一定会初始化,你就别给我检查了。

    lateinit var homeImage: ImageVie

    但是需要注意的是,lateinit 不能使用在基础类型上,基础类型包括

    • byte, short, int, long
    • float, double
    • char
    • boolean

    Koltin中属性在声明的同时也要求要被初始化,否则会报错。 例如以下代码:

    private var name2: String? = null //不报错
    private var name0: String //报错

    lateinit var只能用来修饰类属性,不能用来修饰局部变量,并且只能用来修饰对象,不能用来修饰基本类型(因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值)。
    lateinit var的作用也比较简单,就是让编译期在检查时不要因为属性变量未被初始化而报错。
    Kotlin相信当开发者显式使用lateinit var 关键字的时候,他一定也会在后面某个合理的时机将该属性对象初始化的(然而,谁知道呢,也许他用完才想起还没初始化)。
    bylazy

    by lazy要求属性声明为val,即不可变变量,在java中相当于被final修饰。

    这意味着该变量一旦初始化后就不允许再被修改值了(基本类型是值不能被修改,对象类型是引用不能被修改)。{}内的操作就是返回唯一一次初始化的结果。by lazy可以使用于类属性或者局部变量。

    lazy()是接受一个 lambda 并返回一个 Lazy 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给 lazy() 的 lambda 表达式并记录结果, 后续调用 get() 只是返回记录的结果。
     

    kotlin 关键字 :open  final和abstract

    https://www.jianshu.com/p/5d21f05d3cee

    声明一个带open方法的open类

    引用《Kotlin实战》当中的例子。

    1. // 这个类是open的:其他可以继承它
    2. open class RichButton : Clickable {
    3. // 这个函数是final的:不能在子类中重写它
    4. fun disable(){}
    5. // 这个函数是open的:可以在子类当中重写
    6. open fun animate(){}
    7. // 这个函数重写了一个open函数并且它本身同样是open
    8. override fun click() {}
    9. }
    10. interface Clickable {
    11. fun click()
    12. }

    上面的例子我们可以知道,如果我们重写了一个基类或者接口的成员,重写了的成员同样是open的。如果你不想让子类重写你的实现,可以在显式的将重写的函数标注未final

    1. open class RichButton : Clickable{
    2. // 在这里的“final”并没有被删减是因为没有“final”的“override”是open的
    3. final override fun click() {}
    4. }

    abstract关键字声明抽象类

    Kotlin声明抽象类的关键字和Java一样也是abstract关键字。代码举例

    1. // 抽象类:不能创建它的实例
    2. abstract class Animated{
    3. // 这个函数是抽象函数,没有实现必须在子类当中重写
    4. abstract fun animate()
    5. // 抽象类中的非抽象函数并不是默认open的,但是可以标准open
    6. open fun stopAnimating(){}
    7. fun animateTwice(){}
    8. }

    类访问修饰符的意义

    修饰符相关作用标注
    final不能被重写类中成员默认使用
    open可以被重写需要显式标明
    abstract必须被重写只能在抽象类使用:抽象成员不能实现
    override重写父类或者接口中的成员如果没有使用final表明,重写成员默认是open的



    作者:阿博聊编程
    链接:https://www.jianshu.com/p/5d21f05d3cee
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    is运算符相当于java中的instanceof,用来判断当前类型是不是对应的类型(可以是对应的类型的子类),说的很抽象,上代码看一下。

    fun main() {
        val str = "helloWorld"
        println(str is String)
    }
    输出:true

    2.!is是is的否定形式(就是效果跟is相反),上代码看一下

    fun main() {
        val x = 10
        println(x !is Int)
    }
    输出:false

    3.as是相当于是显示类型转换(就是强制类型转换),转换成功就转换成功,转换失败会报错

    4.as?比as安全一点,转换成功就转换成功,转换失败会返回null
    ————————————————
    版权声明:本文为CSDN博主「心脏dance」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lgz0921/article/details/119913909

     

  • 相关阅读:
    Java并发编程学习一:线程基础
    DEM格式转换:转换NSDTF-DEM国标数据格式为通用格式,使用ArcGIS工具转换NSDTF-DEM国标.dem文件为通用.tif格式。
    VUE快速入门-2
    基于 BIO 形式下的文件上传
    获取URL参数的两种方法及location对象的各项获取方式
    力扣刷题 day57:10-27
    第1章 需求分析与ssm环境准备
    详解类与对象(上)【c++】
    Elasticsearch未授权访问漏洞(Es未授权访问)
    AI_Neural Network_Note(一)
  • 原文地址:https://blog.csdn.net/shuangrenlong/article/details/126190585