¿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