Из того, что я знаю, где есть два способа достижения этой сомнительной цели.
Я продемонстрирую легкую и обсуду идею, стоящую за более сложной.
Легкая основывается напросто вызывая toString () для метода:
val functions = MyInterfaceImpl::class.functions
val bar = (functions.toList()[0])
val foo = (functions.toList()[2])
println(bar.toString()) // fun MyInterfaceImpl.bar(): kotlin.Unit
println(foo.toString()) // fun MyInterface.foo(): kotlin.Unit
Как видите, вы можете выяснить, был ли метод переопределен или нет, проанализировав строку.
Более сложным решением было бы копатьв KFunctionImpl
, который имеет delegate
член, который имеет dispatchReceiverParameter
Это очень неприятное отражение, которое еще более неприятно, потому что большинство этих классов являются внутренними и лениво инициализируются.