侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 274 篇文章
  • 累计创建 55 个标签
  • 累计收到 74 条评论

Kotlin 几个比较特殊的关键字介绍:lateinit,internal,Any等

Z同学
2022-02-28 / 0 评论 / 2 点赞 / 137 阅读 / 985 字
温馨提示:
本文最后更新于 2022-02-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

延迟初始化属性- 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之前,需要了解publicprivateprotected 等关键字。后面几个关键字在Java中比较常见。大家也都能理解。它就是定义了不同的访问权限。

public:全局可见。所有地方都可以调用和访问。

private :私有,只有自己类本身可以访问。

protected:保护模式,只有自己和继承的子类可以访问。

internal就是一个定义为模块中可见的一种访问权限。它可以说完全是由于现在的开发工具而定义的一种模式了。

我们在IDEA中开发时,可能不同业务之间都会分module进行管理。而每个module可能会互相依赖,但是部分函数又不想被其他模块访问。那么就可以定义为internal了。

定义为internal的函数,在同一个module中和public关键字的可见性是一样的。

Any 根类

Any是Kotlin中所有的类的根类,Kotlin中所有类都直接或间接继承于Any类。

而它比较关键的三个函数就是:

  • equals:比较函数,用于比较其他对象与当前对象是否相等。
  • hashCode:返回该对象的哈希吗值,可以提高对HashtableHashMap对象的访问效率。
  • toString:返回该对象的字符串结果。

下篇介绍关于object关键字的相关知识吧。本篇就到这里了。

2

评论区