Kotlin의 위임

5515 단어 delegationkotlin
kotlin은 by 키워드를 사용하여 위임 패턴을 지원합니다. 파생 클래스가 특정 개체를 통해 인터페이스의 구현된 모든 공용 메서드에 액세스할 수 있도록 합니다.

interface Base {
    fun print()
}



class BaseImpl(val x:String):Base{
   override val msg: String?  = x  
    override fun print(){
        println("Printing impl ${msg}}")
    }
}
class BaseAnotherImpl():Base{
     override val msg: String?  = null  
    override fun print(){
        println("Printing Another impl ")
    }
}


이 코드를 작성할 필요가 없습니다

//class Derived (val b:Base) :Base{
//     override fun print(){
//         b.print()  // delegating the responsibility  of b reference
//     }
// }



kotlin은 기본적으로 이 코드를 사용하도록 지원합니다.

class Derived(b:Base):Base by b 



fun main(args: Array<String>) {
    val b1 = BaseImpl("Hell")
    Derived(b1).print()

    val b2 = BaseAnotherImpl() // Printing impl Hell
    Derived(b2).print() // Printing Another impl    
}


위임에 의해 구현된 인터페이스의 재정의 멤버

class Derived(b:Base):Base by b  {
    override val msg  = "2"   // can't access this property by b reference 

    override fun print(){
        print("\noverriding  print method of interface ")

    }
}



  // after overiding 
    val d = Derived(b1)
    d.print() // overriding  print method of interface
    print(d.msg) // 2 



원본 게시물sanjayprajapat.hashnode.dev

좋은 웹페이지 즐겨찾기