Ответ 1
Нет. См. разница между методами и функциями. Методы не передаются в качестве параметров под капотом - они передаются в функциональные объекты при передаче другому методу/функции. Эти функциональные объекты являются экземплярами анонимных, генерируемых компилятором классов и не имеют имени (или, по крайней мере, являются анонимными классами, имеют какое-то искаженное имя, доступ к которому можно получить с помощью отражения, но, вероятно, не нужно).
Итак, когда вы это сделаете:
def foo() {}
def bar(f: () => Unit) {}
bar(foo)
что происходит в последнем вызове:
bar(() => foo())
Теоретически, однако, вы можете найти имя метода, в котором объект функции, который вы передаете, является обертыванием. Вы можете сделать интроспекцию байт-кода, чтобы проанализировать тело метода apply
объекта функции f
в методе bar
выше и заключить на основании этого, что имя метода. Однако это как аппроксимация, так и избыток.