Глобальный универсальный c значение в Kotlin - PullRequest
0 голосов
/ 15 апреля 2020

Учитывая простой класс:

data class Optional<T>(val value: T?)

Я могу определить generi c функцию и значение расширения следующим образом:

fun <T> T?.makeOptional() = Optional(this)  // Compiles ✅
val <T> T?.optional get() = Optional(this) // Compiles ✅

Я также могу определить global generi c функции:

fun <T> makeOptionalNull() : Optional<T> = Optional(null) // Compiles ✅

Однако я не могу определить эквивалентное global generi c значение для этой последней функции:

val <T> optionalNull : Optional<T> = Optional(null) // Compilation Error ❌
//   ^ Type parameter of a property must be used in its receiver type

A global non-generi c значение вполне подходит, хотя:

val stringNull : Optional<String> = Optional(null) // Compiles ✅

Как создать глобальное значение generi c, аналогичное над? Это вообще возможно?

1 Ответ

1 голос
/ 16 апреля 2020

Ваша проблема может быть решена следующим образом:

data class Optional<out T>(val value: T?) // <- note the 'out' modifier here

val optionalNull: Optional<Nothing> = Optional(null)

// and use it as follows:
val myOptionalVariable: Optional<String> = optionalNull // assignable thanks to 'out' modifier
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...