¿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

  • Kotlin .let {} nulo error de security supuestamente falso
  • Excepción del puntero nulo trabajando con Map (Kotlin)
  • function kotlin devuelve nulo
  • Kotlin: No se pueden aplicar dos condicionales a la vez. Verificar con el estilo de function de "cuerpo de retorno".
  • Kotlin con si no es nulo
  • manejar un object que puede devolver nulo en kotlin
  • Kotlin null-safety para properties de class
  • ¿Cómo puedo crear una instancia de un object usando valores de parameters de constructor pnetworkingeterminados en Kotlin?
  • ¿Se puede convertir un campo en una versión no nula de sí mismo?
  • Kotlin - lateinit VS Cualquiera? = nulo
  • Error de compilation de la llamada insegura de Kotlin en un receptor nulo después de un control nulo