Android Kotlin基础笔记

310 阅读3分钟

以此记录学习kotlin基础语法笔记 方便以后查阅复习

  • 声明属性 var 普通可变变量 val 不可变变量 类似于 final

  • 空指针设计 ?. (调用前判断是否为空 ) !!.(不管是不是空)

  • 空指针设计类型 可空类型 不可空类型 平台类型 (kotlin与别的平台交互) 举例子:Button!

  • 判断对象类型 java 使用 instanceof 关键字 kotlin 使用 is 关键字

    as 强制转换 如果用 is 判断过了 不用强转

    if ( view is xxxView){
        // var view_ as xxxView (不需要了)
        // 已经强转过了 不需要 as 手动强转
    }
  • java 类型.class 获取class 对象

    kotlin通过 类名 :: class (kotlin的class对象)
    kotlin 获取 java class 对象 -> demo::class.java

  • kotlin 属性的 get / set 方法 关联在属性下面了 内部属性field 不写的话 自带 set get 效果

  var code:String? = null
       set(value){
        field = value
    }
       get(){
        return field
    }
  • kotlin 声明构造函数使用 constructor 关键字

  • java 调用 kotlin 对象的时候 只能调用默认提供的get / set 函数,如果想像java 直接调用 需要注解 @JvmField

  • kotlin 所有的类 继承了 Any (相当于java的object

  • void = Unit (无返回值)

  • 单参数构造器 调用 多参 : this(context,null)

  • 构造函数 调用 父类构造函数 :super(xx,xx);

  • 定义一个数组 private val codeList = arroyOf()... 会装箱拆箱 可以用基本数据类型数据 intArrayof()...等

  • java中数组的长度是lengthkotlin中数组的长度是size

  • kotlin中是没有static关键字的

  • kotlin 函数可以直接定义在文件中 = 顶层函数 top level function

  • java调用 kotlin顶层函数的话 需要通过文件名. 调用 例如:utils.dp2px...(文件名+kt后缀)

  • Object 修饰的类都会变成静态

  • java 调kotlin object 声明静态类 需要 INSTANTCE 实例 所以 object就是声明单例类 单例对象用的

  • java调用 kotlin 伴生对象 object companion 需要 class.Companion.xxxx();

  • 在kotlin object中的类 声明注解 @JvmStatic 就可以变成 真正java中的静态函数 不需要 .companion调用

  • java调kotlin顶层函数可以改文件名 , @file:JvmName("KotlinUtilsDemo")

  • kotlin创建匿名内部类 使用的是object关键字 object : 类型 { } (类需要括号 接口不需要)

  • 区间 if(x>=200 && x<500) 此类判断可以用区间表示 if(200..499) 表示 开区间 不包括500

  • kotlin使用 when 代替 switch case 逻辑判断语法

  • 编译期常量:编译期间不能修改的常量 static final - > kotlin: const val

  • java中引用外部类对象 MainActivity.this.xxxx kotlin => this@MainActivity.xxxx(this@外部类类名)

  • lambda -> 单函数接口 匿名内部类 使用 直接一个括号

  • kotlin声明java的ArrayList => MutableList = ArrayList() 这样 ,也可通过 kotlin函数库 arraylistOf()....

  • kotlin遍历: for(str in list) in 代替java的 冒号

  • kotlin 如果要声明 内部类 需要inner关键字 否则就不是 内部类

  • kotlin 模块内访问修饰符 internal 当前模块可见 防止误用

  • 普通类是被final修饰的 不可被继承 如果需要继承 则使用open 关键字修饰类,除非有 abstract/open/override 关键字修饰的

大概的笔记 方便忘记了查看 有语法错误以及描述不恰当 见谅