Kotlin 베이스 - object
                                            
 7926 단어  Kotlin
                    
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()이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
머티리얼 디자인 도입 직후에 할 일안드로이드 프로젝트에 머티리얼 디자인을 도입한 후에 할 일을 적는다. Android 프로젝트를 만든 후 Hello world에 대해 수행합니다. 머티리얼 디자인을 도입하기 위해, build.gradle 를 이하와 같...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.