Kotlin стандартное значение по умолчанию c параметр возвращаемого значения функции - PullRequest
2 голосов
/ 12 марта 2020

У меня есть функция, которая возвращает тип generi c на основе переданного параметра, но я не могу установить его значение по умолчанию. Вот пример функции, которую я имею:

fun <T : BaseClass> parse(json: String, gson: Class<T> = BaseClass::class): T =
  Gson().fromJson(json, gson)

Однако я получаю ошибку несоответствия типов для параметра по умолчанию: ожидается Class<T>, найдено Class<BaseClass>. Я могу добиться того же, используя вторую функцию:

fun <T : BaseClass> parse(json: String, gson: Class<T>): T =
  Gson().fromJson(json, gson)

fun BaseClass parse(json: String) =
  parse(json, BaseClass::class)

, которая не выглядит Kotlin -way. Возможно ли иметь стандартный параметр generi c по умолчанию? Спасибо.

1 Ответ

3 голосов
/ 12 марта 2020

Ваша первая строка кода не будет применима на практике. Что произойдет, если вы сделаете это?

class Derived: BaseClass()

val x = parse<Derived>(someJson)

Это нарушило бы его собственное определение типа generi c.

Возможно, ваше приведенное выше решение лучше всего подходит для вашего использования. дело. Вы также можете рассмотреть возможность использования типа reified, например, так:

inline fun <reified T : BaseClass> parse(json: String): T =
    Gson().fromJson(json, T::class)

Это не дает вам никакого значения по умолчанию, но позволяет компилятору выводить тип там, где это возможно, поэтому в некоторых случаях у вас не будет указать класс:

fun someFunction(derived: Derived) {
    //...
}

someFunction(parse(someJson)) // no need to specify <Derived>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...