Intereting Posts
вопросы о DI, ViewModel и т. д. Какова основная разница между сбросом и сокращением в Котлине? Когда использовать какой? Функция расширения не создает новый объект Observable Локальные функции доступа к родительским переменным с тем же именем Перехват события касания и перенаправление его в зависимости от состояния события движения Почему диапазон повторного использования Dagger медленнее, чем Singleton? Дженерики для RecyclerView.Adapter Android Ошибка компилятора Java при связывании с бандой компилятора kotlin с использованием ant Тестирование JUnit в Android Studio с Kotlin прекратило работать Kotlin type mistmatch () -> SomeType vs SomeType Модификаторы доступа Kotlin означают то же, что и в Java? упаковать файл Kotlin .class в JAR для выполнения Типы подстановок Java против звездной проекции Котлина Должен ли я использовать класс данных, даже если я реализую все hashCode (), equals () и toString ()? Запустите операцию наложения, не показывая остальную часть приложения.

Могу ли я получить KFunction из переменной типа функции в Kotlin?

Я пытаюсь получить имя, в котором была определена функция с помощью

fun aFunction() = Unit fun functionName(function: () -> Unit) : String { val functionAsKFunction: KFunction<Unit> = someMiracle(function) return functionAsKFunction.name } assertEquals("aFunction", functionName(::aFunction)) 

Solutions Collecting From Web of "Могу ли я получить KFunction из переменной типа функции в Kotlin?"

Вы можете просто KFunction<*> () -> Unit в KFunction<*> . Теоретически это детализация реализации, но я не думаю, что она когда-нибудь сломается.

 fun functionName(function: () -> Unit) : String { val functionAsKFunction: KFunction<*> = function as KFunction<*> return functionAsKFunction.name } 

Изменить : Очевидно, что это не будет работать для lambdas (какое имя вы ожидали бы в любом случае?) Чтобы предотвратить сбои, вы можете использовать безопасный листинг, например:

 fun functionName(function: () -> Unit) : String? { val functionAsKFunction: KFunction<*> = function as? KFunction<*> ?: return null return functionAsKFunction.name }