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.

  • ¿No es posible establecer expectativas sobre una propiedad perezosa?
  • ¿Cómo comparar un progtwig de Kotlin?
  • Cómo Kotlin tomará val como palabra key de la class java
  • Divida el marco de google-vision en dos
  • TornadoFX: el text de la label no se actualiza
  • cómo hacer que el subset múltiple sea constante en kotlin
  • ¿Cuál es la syntax correcta para anular una function de miembro de interfaz con un modificador de visibilidad?
  • Funciona butterknife 7.x con Kotlin M14?
  • ¿Cómo devolvemos valores múltiples de una function en Kotlin como lo hacemos en swift?
  • kapt: ¿Cómo procesar las fonts de testing?
  • Smartcast es imposible porque propery tiene un getter abierto o personalizado