Получить класс времени выполнения параметра универсального типа в Kotlin без ключевого слова reified - PullRequest
0 голосов
/ 02 мая 2018

Kotlin предоставляет способ получить класс времени выполнения параметра универсального типа с ключевым словом reified, которое может использоваться только с функциями inline. Например, следующие работы:

inline fun <reified T> test() : T {
  println(T::class.java)
}

Однако мне нужен способ сделать это в не встроенной функции . Поскольку ключевое слово reified не является опцией для не встроенных функций, следующее не работает:

fun <reified T> test() : T {
  println(T::class.java)
}

Есть ли у Kotlin другой метод решения этой проблемы? Я знаю, что взятие Class<T> в качестве параметра может быть решением, но я не хочу передавать для этой цели дополнительный аргумент.

1 Ответ

0 голосов
/ 02 мая 2018

Несколько хитрое решение:

inline fun <reified T> test() : T = testImpl(T::class.java)
private fun <T> testImpl(`class`: Class<T>) : T {
  println(`class`)
  // do something
}

В этом решении вы фактически передаете экземпляр Class, но вы не делаете это напрямую. Ваш код вызова, вероятно, будет выглядеть как test<Xxx>().
Если T из test можно сделать вывод, вы можете использовать test() напрямую, и универсальный параметр по-прежнему передается правильно.

...