定义变量
var k:String?=null
后面的?表示可以赋值为null
mHandler?.post()
表示mHandler为空就不执行后面的
mHandler!!.post()
表示mHandler为空就抛出异常
lateinit的作用:延迟初始化
具体来讲,这个关键字告诉编译器,我无法声明的时候就初始化,但是我保证我在使用前一定会初始化,你就别给我检查了。
lateinit var homeImage: ImageVie
但是需要注意的是,lateinit 不能使用在基础类型上,基础类型包括
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
kotlin 关键字 :open final和abstract
https://www.jianshu.com/p/5d21f05d3cee
引用《Kotlin实战》当中的例子。
- // 这个类是open的:其他可以继承它
- open class RichButton : Clickable {
-
- // 这个函数是final的:不能在子类中重写它
- fun disable(){}
-
- // 这个函数是open的:可以在子类当中重写
- open fun animate(){}
-
- // 这个函数重写了一个open函数并且它本身同样是open
- override fun click() {}
- }
-
- interface Clickable {
- fun click()
- }
上面的例子我们可以知道,如果我们重写了一个基类或者接口的成员,重写了的成员同样是open的。如果你不想让子类重写你的实现,可以在显式的将重写的函数标注未final
。
- open class RichButton : Clickable{
- // 在这里的“final”并没有被删减是因为没有“final”的“override”是open的
- final override fun click() {}
-
- }
Kotlin声明抽象类的关键字和Java一样也是abstract关键字。代码举例
- // 抽象类:不能创建它的实例
- abstract class Animated{
- // 这个函数是抽象函数,没有实现必须在子类当中重写
- abstract fun animate()
-
- // 抽象类中的非抽象函数并不是默认open的,但是可以标准open
- open fun stopAnimating(){}
-
- fun animateTwice(){}
- }
类访问修饰符的意义
修饰符 | 相关作用 | 标注 |
---|---|---|
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