Делая мои первые шаги в Kotlin, я изо всех сил пытаюсь найти правильную сигнатуру для функции, которая получает экземпляр известного класса вместе с желаемым выходным классом и затем просматривает карту лямбда-преобразователей, является ли преобразование может быть сделано.
Вот пример для Long
:
private fun <T> castLong(value: Long, clazz: Class<out T>): T {
// map lookup removed for simplicity
return when (clazz) {
String::class.java -> { value.toString() }
else -> { throw IllegalArgumentException("Unsupported Cast") }
}
}
Где T
является классом желаемого возвращаемого значения - скажем, String
. Нужно уметь звонить castLong(aLongValue, String::class.java)
и получать экземпляр String
. Но компилятор говорит:
Несоответствие типов: предполагаемый тип - String, но ожидалось T
Кажется, что это должно быть возможно, поскольку пока что это довольно просто, но даже игра с reified
и другими конструкциями не дала лучших результатов.