美文网首页
84.Kotlin object 和 companion obj

84.Kotlin object 和 companion obj

作者: SlideException | 来源:发表于2020-08-22 23:29 被阅读0次

    object EightyFourActivity {
    /**
    *
    * 每天一个知识点day84 TODO Kotlin object 和 companion object
    * https://www.jianshu.com/p/a8d1877143b2
    * https://www.jianshu.com/p/14db81e1576a
    * object
    * object声明不能用在方法和inner内部类中,但是能嵌套在其他object声明和嵌套类中。
    * object表达式是在使用的地方立即被初始化和执行的,
    * 因此object不能有定义构造函数,
    *
    *
    * kotlin中object关键字可以表示两种含义
    * 1.对象表达式
    * 匿名内部类的写法
    * textView.setOnClickListener(object : OnClickListener {
    * override fun onClick(p0: View?) {
    * Toast.makeText(this@TestActivity, "点击事件生效", Toast.LENGTH_LONG)}})
    *
    * 2.对象声明
    * 用object修饰的类为静态类,里面的方法和变量都是静态的。
    * 直接声明类
    * object ObjTest{
    * fun getA(){}
    * }
    * 静态内部类
    * class Test{
    * object InnerClass{
    *
    * }
    * }
    * 没有被inner 修饰的内部类都是静态的
    * 如果需要在java中调用ObjTest的getA方法就是ObjectTest.INSTANCE.getA()
    *
    *
    * companion object
    * companion object修饰为伴生对象,伴生对象在类中只能存在一个,可以给伴生
    * 对象起个名字来调用,否则就直接用Companion调用
    * companion object里面调用不到外部的成员变量,因为companion object相当于静态类
    * class ComClass{
    * companion object{
    * fun getObj(){}
    * }
    * }
    * 在java中调用为ComClass.Companion.getObj()
    * class ComClass{
    * companion object AAB{
    * fun getObj(){}
    * }
    * 在java中调用为ComClass.AAB.getObj()
    *
    * 总结:
    * 1.object表达式是在使用的地方立即被初始化和执行的。
    * 2.object声明一个类是延迟加载,只有当第一次被访问的时候才会初始化,
    * 所以用来实现单例,
    * 3.companion object是当包含他的类被加载时就初始化了,这点和java的static还是一样的。
    * 官方并不建议我们滥用object关键字,因为他不利于控制也不易于测试,毕竟他会在声明时就
    * 初始化,一般情况下我们使用object就是匿名内部类和单例,而companion object一般用来
    * 声明静态域。
    *
    *
    */

    @JvmStatic
    fun getObj() {
        ComObjClass.OBJCC.get()
    }
    
    
    val objA: String? = null
    

    }

    class ComObjClass {

    val tv: TextView? = null
    
    fun ss() {
        tv.let {
    
        }
    }
    
    companion object {
    
        val c: String = "-----"
        const val cc:String = "----"
        
        
        
    
        @JvmStatic
        val mComObj: String? = null
        
        fun getc(){
            c.toString()
        }
    
    }
    
    val objB: String? = null
    
    object OBJCC {
        fun get() {
    
        }
    }
    

    }

    class StaticDemoActivity {
    companion object {
    const val LOAN_TYPE = "loanType"
    const val LOAN_TITLE = "loanTitle"
    }
    object A{
    }

    inner class SCS{
    }
    

    }

    相关文章

      网友评论

          本文标题:84.Kotlin object 和 companion obj

          本文链接:https://www.haomeiwen.com/subject/mxwbjktx.html