Kotlin 베이스 - object

7926 단어 Kotlin
  • 1. Object 표현식
  • 2. object 대상 성명
  • 2.1 Object 객체 직접 선언
  • 2.2 인터페이스(추상류)의 대상 성명을 계승
  • 2.3 클래스 내 개체 선언
  • 셋째, 반려자 Companion Object
  • 3.1 일반적인 반생 대상
  • 3.2 반생 대상에서 인터페이스 구현
  • 3.3 동반자 대상의 확장


  • 1. Object 표현식


    익명 내부 클래스를 만드는 형식: object: ClassName {...}
    // Handler      
    val handler: Handler = object: Handler() {
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            when(msg?.what) {
                1 -> "Expression1"
                2 -> "Expression2"
            }
        }
    }
    
    /*
     *             ,         Anko        ;
     * TextView(ctx).setOnClickListener { 
     *     //...
     * }
     */
    TextView(ctx).setOnClickListener(object: View.OnClickListener{
        override fun onClick(v: View?) {
            //...
        }
    })

    2. object 개체 선언


    2.1 Object 객체 직접 선언


    자바에서 단일한 성명은 게으름뱅이식, 굶주림식, 정적 내부류, 매거 등 여러 가지 방식을 가질 수 있다.Kotlin에서 단일 모드의 실현은 object 키워드 하나만 있으면 된다.
    // Kt        : object      ,            
    object SingleObject {
        fun test() {
            //...
        }
    }
    
    //     :  .   ()
    class Main {
        fun test() {
            SingleObject.test() // class   ,      SingleObject.INSTANCE.test();    
        }
    }
    
    // ----------------          ---------------
    
    //Kotlin      class    :
    public final class SingleObject {
       public static final SingleObject INSTANCE;
    
       public final void test() {
       }
    
       private SingleObject() {
          INSTANCE = (SingleObject)this;
       }
    
       static {
          new SingleObject();
       }
    }

    2.2 인터페이스(추상 클래스)의 대상 성명을 계승한다

    // Kt     
    object MyMachine: Machine() {
        override fun start() {
            //...
        }
    }
    abstract class Machine {
        abstract fun start()
        open fun stop() {}//   open           ,     final   ,     ;
    }
    
    // ----------------          ---------------
    
    //         class  
    public final class MyMachine extends Machine {
       public static final Single INSTANCE;
    
       public void start() {
          String var1 = "not implemented";
          throw (Throwable)(new NotImplementedError("An operation is not implemented: " + var1));
       }
    
       private MyMachine() {
          INSTANCE = (MyMachine)this;
       }
    
       static {
          new MyMachine();
       }
    }
    
    public abstract class Machine {
       public abstract void start();
       public void stop() {}
    }

    2.3 클래스 내 개체 선언

    class Single {
        object Manage {//        ,   inner           
            fun execute() {
                //...
            }
        }
    }
    
    // ----------------          ---------------
    
    public final class Single {
       //      
       public static final class Manage {
          public static final Single.Manage INSTANCE;
    
          public final void execute() {}
    
          private Manage() {
             INSTANCE = (Single.Manage)this;
          }
    
          static {
             new Single.Manage();
          }
       }
    }

    3. 반려자 Companion Object


    반생 대상은 클래스에 성명된 일반 대상입니다. 이름 (기본값 Companion 을 사용할 수 있으며, 인터페이스나 확장 함수나 속성을 실현할 수 있습니다.

    3.1 일반적인 반생 대상

    class MyClass {
        companion object Factory {
            val url = ""
            fun create(): MyClass = MyClass()
        }
    }
    
    //      ,       .        .   
    MyClass.url
    MyClass.create()

    3.2 반생 대상에서 인터페이스 구현

    interface Factory {
        fun create(): T
    }
    
    class MyClass {
        //         
        companion object : Factory {
            val url = ""
            //          
            override fun create(): MyClass = MyClass()
        }
    }
    
    //   
    class Main {
        fun test() {
            setFactory(MyClass) //        MyClass  ,    MyClass     
        }
    
        fun  setFactory(factory: Factory) {
            factory.create()
        }
    }

    3.3 반생 대상의 확장


    반생 대상의 확장은 일반 클래스의 확장과 일치합니다
    class MyClass {
        companion object Factory {
            fun create(): MyClass = MyClass()
        }
    }
    
    //       
    fun MyClass.Factory.fun_name() = ...    ...
    
    //   
    MyClass.Factory.fun_name()

    좋은 웹페이지 즐겨찾기