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

Мне нужно украсить экземпляр на 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?): соединение по внутреннему!

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

Intereting Posts
Управление объектами в рамках мероприятий, чтобы избежать использования Null Автоматический ввод кода Kotlin в шаблон делегирования Создать произвольное представление Как отключить клавиатуру, когда я нажимаю EditText? kotlin, которая может использовать соединение httpS без проверки сертификата (например, curl – insecure) IntelliJ IDEA с использованием JavaScript-версии зависимости, указанной в файле сборки Gradle? «Не может найти ссылочный класс» с Proguard и Kotlin База данных объектов, перекрывающая вставленные объекты Поле доступа к котлину в другом месте? Тестирование аккских актеров с участием Котлина и Акка-Тесткита В kotlin, как вернуть экземпляр, определяемый параметром generic class Kotlin с JPA / Hibernate: без ленивой загрузки без `open`? Не удается использовать динамический веб-контент с Spring Boot и Kotlin Как настроить проект eclipse для использования Kotlin с JPA / Hibernate? Использование сторонних пользовательских интерфейсов с TornadoFX