延迟初始化属性- lateinit
我们在创建一个对象时,可能这个对象部分变量是其他对象。但是我们在初始化该参数前不想调用。或不用初始化。那么可以使用lateinit
进行延迟初始化。
可能文字描写不够具体,我们通过代码进行理解吧。
class X1{
var vale= X2()
}
class X2{
//有一大窜的的数据
}
fun main(args:Array<String>){
val xx = X1()
...
println(xx.vale)
}
在上面的示例中,我们X1
对象中的属性vale
引用了一个X2
对象。我们如果想在X1
对象初始化话的时候不进行X2
的初始化。
等到程序之后调用vale
属性的时候再进行初始化X2
。这个需求就是延迟初始化属性lateinit
的作用了。
示例:
class X1{
lateinit var vale= X2()
}
延迟初始化的属性有以下要求:
1.不能是可空数据类型。
2.只能是
var
声明的数据类型。3.
lateinit
必须放在var
之前(右侧)。
模块中可见-internal
我们在了解internal
之前,需要了解public
和private
,protected
等关键字。后面几个关键字在Java
中比较常见。大家也都能理解。它就是定义了不同的访问权限。
public
:全局可见。所有地方都可以调用和访问。
private
:私有,只有自己类本身可以访问。
protected
:保护模式,只有自己和继承的子类可以访问。
而internal
就是一个定义为模块中可见的一种访问权限。它可以说完全是由于现在的开发工具而定义的一种模式了。
我们在IDEA
中开发时,可能不同业务之间都会分module
进行管理。而每个module
可能会互相依赖,但是部分函数又不想被其他模块访问。那么就可以定义为internal
了。
定义为internal
的函数,在同一个module
中和public
关键字的可见性是一样的。
Any 根类
Any是Kotlin中所有的类的根类,Kotlin中所有类都直接或间接继承于Any类。
而它比较关键的三个函数就是:
equals
:比较函数,用于比较其他对象与当前对象是否相等。hashCode
:返回该对象的哈希吗值,可以提高对Hashtable
和HashMap
对象的访问效率。toString
:返回该对象的字符串结果。
下篇介绍关于object关键字的相关知识吧。本篇就到这里了。
评论区