¿Cómo definir un miembro delegado que se puede anotar en Kotlin?

Necesito decorar una instancia en Java y me gustaría que la delegación esté en Kotlin (más fácil).

El problema es que obtengo un error de compilation en la definición.

¿Cómo puedo definir inner para poder recibir null?

 open class ConnectionDecorator(var inner: Connection?) : Connection by inner // Getting an error on the right inner 

Ejemplo de uso de Java:

 new ConnectionDecorator(null).close(); 

* Este es un ejemplo simplificado, tratando de usar la delegación de Kotlin en Java, donde el contenido aprobado puede ser nulo.

Puede proporcionar un object de connection nulo si el inner es nulo, por ejemplo:

 // v--- the `var` is unnecessary open class ConnectionDecorator(var inner: Connection?) : Connection by wrap(inner) fun wrap(connection: Connection?): Connection = when (connection) { null -> TODO("create a Null Object") else -> connection } 

De hecho, no hay necesidad de tal ConnectionDecorator , no tiene sentido, porque cuando usa la delegación también necesita replace algunos methods para proporcionar operaciones adicionales, por ejemplo: log . puede usar el método de wrap directamente, por ejemplo:

 val connection:Connection? = null; wrap(connection).close() 

Debe hacer que la parte inner no se pueda nulos y cree una instancia de ConnectionDecorator mediante wrap , por ejemplo:

 // v--- make it to non-nullable open class ConnectionDecorator(var inner: Connection) : Connection by inner { fun close(){ inner.close(); log.debug("connection is closed"); } } val source:Connection? = null; // v--- wrap the source val target:Connection = ConnectionDecorator(wrap(source)) target.close() 

Prueba esto

ConnectionDecorator (null) .close ();

class abierta ConnectionDecorator (var inner: ¿Conexión?): ¡Conexión interna!

Espero su trabajo

  • manejar un object que puede devolver nulo en kotlin
  • Lanzamiento inteligente a kotlin.String
  • Cómo implementar lateinit correctamente con objects de class personalizados para usar en onCreate () en Android evitando el error 'Property getter or setter expected'
  • Kotlin - lateinit VS Cualquiera? = nulo
  • kotlin reflexión verificación nullable types
  • Kotlin Advertencia de security nula Tokens inesperados (uso; para separar expresiones en la misma línea)
  • Cómo establecer la propiedad de Kotlin tardía en nulo
  • Las comprobaciones nulas no se insertan para el tipo reificado cuando param no es nulo
  • Kotlin null-safety para properties de class
  • Cómo hacer comprobaciones nulas con las funciones de extensión de Kotlin en una actividad de Android
  • ¿Cómo ejecutar código si el object es nulo?