Ваша первая строка кода не будет применима на практике. Что произойдет, если вы сделаете это?
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>