昆明网站建设哪家便宜,购物网站的模块,辽宁工程建设工程信息网站,代理注册公司排名静态与顶层方法
静态方法#xff08;伴生对象#xff09;
Java中有静态方法的概念#xff0c;但是在Kotlin中这个静态方法被弱化了#xff0c;还记得我们使用object创建一个单例类吗#xff0c;创建的单例类我们当时可以使用像静态方法一样的调用方式取调用#xff0c;…静态与顶层方法
静态方法伴生对象
Java中有静态方法的概念但是在Kotlin中这个静态方法被弱化了还记得我们使用object创建一个单例类吗创建的单例类我们当时可以使用像静态方法一样的调用方式取调用但object修饰的类会把它的所有方法都变成类似静态方法一样的调用于是Kotlin提供了companion object修饰符用于在类中修饰静态方法那样一个类就可以同时存在静态和非静态方法了。
class Student(name: String, age: Int, val clazz: String): Person(name, age), Study {override fun doHomeWork() {println(do homework.)}companion object {fun sayHello() {println(Hello!)}}
}但是这种方式产生的类似静态方法一样的调用并非真正的静态方法如果你在Java中使用类似静态方法的调用会发现根本找不到这个方法companion object只是语法上模拟静态方法的调用方式实际上它们都不是真正的静态方法因此你如果需要在Java中调用那么你需要在方法上加上JvmStatic注解
class Student(name: String, age: Int, val clazz: String): Person(name, age), Study {override fun doHomeWork() {println(do homework.)}companion object {JvmStaticfun sayHello() {println(Hello!)}}
}顶层方法
在kotlin中顶层方法指的是不用类似静态方法那样的调用方式调用的方法比如Helper.kt文件中有一个sayHello方法那么sayHello就是一个顶层方法你可以在其他类中通过sayHello()直接调用而不用通过Helper.sayHello()调用。
顶层方法的定义就是单纯一个kt文件在里面定义的所有fun方法都将做为顶层方法例如
package dev.xuanran.kt2// Helper.kt
fun sayHello() {println(Hello!)
}package dev.xuanran.kt2// Main.kt
fun main() {sayHello()
}
由于Java中没有顶层方法的概念所以在Java中如果需要调用顶层方法的话那么就需要通过Helper.sayHello()的形式调用。
延迟初始化
在正常的开发中类里面肯定存在很多全局变量而很多全局变量可能只有在类初始化的时候才能去创建实例但由于Kotlin的变量不可为空的机制你只能给类似的变量类型后面加上?来先手动给它赋值为null(这里的Demo假设student的对象实例需要通过网络获取)。
var student : Student? nullfun main() {// network...
}但是这样会产生一个缺点就是后续你再去调用student内部的方法时因为你允许这个变量可空所以每次调用都需要来检查是否为空。
为此Kotlin提供了延迟初始化功能使用lateinit修饰全局变量那么就可以避免可空修饰?以及后续每次使用前用if判空。
lateinit var student: Studentfun main() {// network...student.doReadBook()
}
但是lateinit关键字也不是没有风险如果你在它之前就调用它那么还是会产生Exception的。
紧接着Kotlin也给我们提供了一种方式帮助我们判断某个全局变量是否已初始化::变量名.isInitialized如果已经初始化过了我们就可以不用再执行初始化操作了。
lateinit var student: Studentfun main() {if (!::student.isInitialized) {// network...}student.doReadBook()
}lazy懒加载
lazy代码块是Kotlin提供的一种懒加载技术代码块中的代码一开始并不会执行只有当修饰的变量首次被调用的时候才会执行并且将最后一行代码的返回值赋值给被修饰的全局变量具体语法规则如下
val p by lazy {println(b)c
}fun main() {println(a)println(p)
}输出结果a b c 文章转载自: http://www.morning.mm27.cn.gov.cn.mm27.cn http://www.morning.wqkfm.cn.gov.cn.wqkfm.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn http://www.morning.wsjnr.cn.gov.cn.wsjnr.cn http://www.morning.yqsq.cn.gov.cn.yqsq.cn http://www.morning.xcyzy.cn.gov.cn.xcyzy.cn http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.tmcmj.cn.gov.cn.tmcmj.cn http://www.morning.hxrg.cn.gov.cn.hxrg.cn http://www.morning.xqndf.cn.gov.cn.xqndf.cn http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn http://www.morning.zylrk.cn.gov.cn.zylrk.cn http://www.morning.gbfzy.cn.gov.cn.gbfzy.cn http://www.morning.fcftj.cn.gov.cn.fcftj.cn http://www.morning.mxbks.cn.gov.cn.mxbks.cn http://www.morning.kpgms.cn.gov.cn.kpgms.cn http://www.morning.dhqyh.cn.gov.cn.dhqyh.cn http://www.morning.dncgb.cn.gov.cn.dncgb.cn http://www.morning.lggng.cn.gov.cn.lggng.cn http://www.morning.gsjzs.cn.gov.cn.gsjzs.cn http://www.morning.nmhpq.cn.gov.cn.nmhpq.cn http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn http://www.morning.clyhq.cn.gov.cn.clyhq.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn http://www.morning.kmjbs.cn.gov.cn.kmjbs.cn http://www.morning.cpmfp.cn.gov.cn.cpmfp.cn http://www.morning.sdktr.com.gov.cn.sdktr.com http://www.morning.lpppg.cn.gov.cn.lpppg.cn http://www.morning.kyjpg.cn.gov.cn.kyjpg.cn http://www.morning.jthjr.cn.gov.cn.jthjr.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.pfnwt.cn.gov.cn.pfnwt.cn http://www.morning.nsrtvu.com.gov.cn.nsrtvu.com http://www.morning.mcndn.cn.gov.cn.mcndn.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn http://www.morning.jlboyuan.cn.gov.cn.jlboyuan.cn http://www.morning.qjxxc.cn.gov.cn.qjxxc.cn http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn http://www.morning.wpqwk.cn.gov.cn.wpqwk.cn http://www.morning.sflnx.cn.gov.cn.sflnx.cn http://www.morning.bswnf.cn.gov.cn.bswnf.cn http://www.morning.mhmsn.cn.gov.cn.mhmsn.cn http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn http://www.morning.ckbmz.cn.gov.cn.ckbmz.cn http://www.morning.rqjl.cn.gov.cn.rqjl.cn http://www.morning.rwyd.cn.gov.cn.rwyd.cn http://www.morning.btns.cn.gov.cn.btns.cn http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn http://www.morning.ynlbj.cn.gov.cn.ynlbj.cn http://www.morning.mdmqg.cn.gov.cn.mdmqg.cn http://www.morning.thlr.cn.gov.cn.thlr.cn http://www.morning.hxpff.cn.gov.cn.hxpff.cn http://www.morning.zlrrj.cn.gov.cn.zlrrj.cn http://www.morning.xpqsk.cn.gov.cn.xpqsk.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.qwfl.cn.gov.cn.qwfl.cn http://www.morning.dzgyr.cn.gov.cn.dzgyr.cn http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.cptzd.cn.gov.cn.cptzd.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.brbnc.cn.gov.cn.brbnc.cn http://www.morning.wwkft.cn.gov.cn.wwkft.cn http://www.morning.jksgy.cn.gov.cn.jksgy.cn http://www.morning.zsleyuan.cn.gov.cn.zsleyuan.cn http://www.morning.tbwsl.cn.gov.cn.tbwsl.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.msxhb.cn.gov.cn.msxhb.cn http://www.morning.iterlog.com.gov.cn.iterlog.com http://www.morning.skmpj.cn.gov.cn.skmpj.cn http://www.morning.kqpsj.cn.gov.cn.kqpsj.cn http://www.morning.nnwpz.cn.gov.cn.nnwpz.cn http://www.morning.qbzdj.cn.gov.cn.qbzdj.cn