2020-10-14 kotlin 语法糖

1.一个非空的变量如果需要在后面赋值,则需要用lateinit。lateinit var只能用来修饰类属性,不能用来修饰局部变量,并且只能用来修饰对象,不能用来修饰基本类型(因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值)。lateinit var的作用也比较简单,就是让编译期在检查时不要因为属性变量未被初始化而报错。lateinit可以在任何位置初始化并且可以初始化多次。而val 的延迟初始化则是要用 by lazy { 代码块 }。by lazy只能作用于val关键字标注的属性。当属性用到的时候才会初始化”lazy{}”里面的内容,而且再次调用属性的时候,只会得到结果,而不会再次执行lazy{}的运行过程。

2如果出现名字冲突,可以使用 as 关键字在本地重命名冲突项来消歧义:

 import foo.Bar     // Bar 可访问

 import bar.Bar as bBar // bBar 代表“bar.Bar”

3属性默认为final,除非申明为 open(跟val一样的原因,不推荐使用可变量)

4   "?"加在变量名后,系统在任何情况不会报它的空指针异常,用于显式标记变量可以为空。"!!"加在变量名后,如果对象为null,那么系统一定会报异常,用于显式标记变量绝对不能为空。这两个符号能让开发者明确对变量空值的感知。任何一个变量,如果不加上?,相当于默认加上了!!。

5lambdas就是一个接口,类似java的监听器

6,listOf 创建不可变LIst,跟Java不同,除了不能改变List的引用之外,也不能变更List的内容; mutableListOf,可以变更内容的List。setOf, mutableSetOf,mapOf, mutableMapOf:与上述内容类型相同

7,数据类     数据类的主构造函数的所有参数需要标记为 val 或 var;

8,可以用一个 var 属性覆盖一个 val 属性,但反之则不行。这是允许的,因为一个 val 属性本质上声明了一个 getter 方法,而将其覆盖为 var 只是在子类中额外声明一个 setter 方法

9,扩展函数的解析是静态的(Extensions are resolved statically):就是说,无论你定义多少个扩展函数,并不会改变接收者类的类的结构,即不会将这些扩展函数插入到接收者类体中成为它的成员函数。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值