Delegación de class en Kotlin

La delegación de rasgos se describe en documentos, y no hay preguntas. ¿Pero qué pasa con la delegación de la class?

class FrameWorkClass // Third party class we cannot modify class MyDerivedFrameWorkClass(c:FrameWorkClass) : FrameWorkClass by c 

¿Cuál es la mejor manera de lograr esto sin modificar FrameWorkClass? Obviamente, no podemos hacer que implemente nuestra interfaz.

Solo puede delegar una interfaz a una variable que implemente esa interfaz. No puedes delegar directamente en otra class. Como @Damian estaba señalando; básicamente se simplifica como:

 interface Framework {} class FrameWorkImpl: Framework {} class MyDerivedFrameWorkClass(val fw: FrameWorkImpl) : Framework by fw {} 

O puede decir genéricamente:

 class MyDerivedFrameWorkClass(val fw: Framework) : Framework by fw {} 

aceptar cualquier implementación de la interfaz del Framework y delegarla, por lo que FrameworkImpl y FrameworkHappyDays funcionan si implementan la interfaz del Framework .

Esto se actualiza al Kotlin actual, donde el trait ha sido renombrado como interface

Por el momento, solo los rasgos se pueden delegar de esta manera. Si tiene una class que le gustaría delegar, simplemente tomaría esa class y extraería un rasgo (interfaz) que incluyera todos los methods que le interesen. Aquí hay un ejemplo basado en su código.

Imagina que tienes estas classs:

 class FrameWorkClass { fun foo() {} fun boo() {} } class MyDerivedFrameWorkClass(c:FrameWorkClass) : FrameWorkClass by c 

No comstack ¿no? Digamos que estás interesado en foo()

 trait FrameWorkTrait { fun foo() {} } class FrameWorkClassImpl: FrameWorkTrait { override fun foo() {} fun boo() {} } class MyDerivedFrameWorkClass(c:FrameWorkTrait) : FrameWorkTrait by c 

Al less así es como lo haría.

  • paraCada dentro paraCada uno en Kotlin
  • Kotlin - Carácter de alimentación de formulario - Escape ilegal: '\ f'
  • El suscriptor RxJava2 PublishSubject no puede recibir elementos cuando se le llama desde varios hilos usando SingleScheduler
  • No se puede agregar y eliminar la opción de menu del fragment y del panel de navigation
  • Juego Regex en Kotlin
  • solo se permiten classs en el lado izquierdo de una class literal
  • ¿Cómo puedo get el nombre de una propiedad de Kotlin?
  • ¿Cómo unir dos tablas en Android usando el método de consulta del proveedor de contenido?
  • Anotación @JsonValue en la propiedad de valor de la class enum de Kotlin
  • Cómo get el nombre de file de class actual en kotlin
  • ¿Cuál es la diferencia entre var name: String? y var nombre: Cadena