Ответ 1
Ошибка правильная, и предлагаемое вами решение является предполагаемым. Обоснование здесь состоит в том, что поскольку аргументы универсального типа не повторяются во время выполнения, вы можете получить только объект, представляющий класс, а не тип.
Там есть обходное решение: если вы используете синтаксис литерала класса через параметр типа reified, подставляя его на нужный тип на сайте вызова, вы получите тот же объект KClass
, но с фактическими аргументами, которые вы используете предоставлена. В вашем случае вы можете объявить следующую функцию:
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java) as T
И используйте его следующим образом:
val f = mock<(Int, Int) -> Unit>()