美文网首页kotlin
kotlin-3-单利

kotlin-3-单利

作者: 揭穿套路 | 来源:发表于2019-01-22 09:57 被阅读0次
    1、饿汉式实现
    //Java实现
    public class SingletonDemo {
        private static SingletonDemo instance=new SingletonDemo();
        private SingletonDemo(){
    
        }
        public static SingletonDemo getInstance(){
            return instance;
        }
    }
    //Kotlin实现
    object SingletonDemo  {
        fun test(){
            println("SingletonDemo")
        }
    }
    
    //调用
    SingletonDemo.test()
    
    

    object 关键字能够一行带代码实现单利

    查看Kotlin对应字节码
    Android Studio(选择Tools工具栏,选择"Kotlin",选择“Show Kotlin Bytecode"
    点击"Decompile" 根据字节码得到以下代码

    public final class SingletonDemo {
       public static final SingletonDemo INSTANCE;
    
       public final void test() {
          String var1 = "SingletonDemo";
          System.out.println(var1);
       }
    
       static {
          SingletonDemo var0 = new SingletonDemo();
          INSTANCE = var0;
       }
    }
    
    1、懒汉式实现
    //Java实现
    public class SingletonDemo {
        private static SingletonDemo instance;
        private SingletonDemo(){}
        public static SingletonDemo getInstance(){
            if(instance==null){
                instance=new SingletonDemo();
            }
            return instance;
        }
    }
    //Kotlin实现
    class SingletonDemo private constructor() {
        companion object {
            private var instance: SingletonDemo? = null
                get() {
                    if (field == null) {
                        field = SingletonDemo()
                    }
                    return field
                }
            fun get(): SingletonDemo{
            //细心的小伙伴肯定发现了,这里不用getInstance作为为方法名,是因为在伴生对象声明时,内部已有getInstance方法,所以只能取其他名字
             return instance!!
            //"!!"加在变量名后,如果对象为null,那么系统一定会报异常!
            }
        }
    }
    
    

    主构造函数私有化
    companion object~伴生对象,每个类都可以实现一个伴生对象,它是该类的所有实例共有的对象。它将类似于Java中的静态字段;

    相关文章

      网友评论

        本文标题:kotlin-3-单利

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