Как определить члену делегата с нулевым значением в Котлине?

Мне нужно украсить экземпляр на Java и хотелось бы, чтобы делегация была в Котлине (проще).

Проблема в том, что я получаю ошибку компиляции в определении.

Как я могу определить inner чтобы иметь возможность получать нуль?

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

Пример использования Java:

 new ConnectionDecorator(null).close(); 

* Это упрощенный пример, пытаясь использовать делегацию Котлина в Java, где переданный контент может быть нулевым.

Вы можете предоставить объект Null Connection, если inner равно null, например:

 // 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 } 

На самом деле, нет необходимости в таком ConnectionDecorator , это не имеет смысла, потому что при использовании делегирования вам также необходимо переопределить некоторые методы для предоставления дополнительных операций, например: log . вы можете использовать метод wrap напрямую, например:

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

Вы должны сделать inner значение непустым и создать экземпляр ConnectionDecorator путем wrap , например:

 // 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() 

Попробуй это

ConnectionDecorator (нуль) .close ();

открытый класс ConnectionDecorator (var internal: Connection?): соединение по внутреннему!

Надеюсь, что его работа