例如,我看到了这样的Scala表达式:

objX.methodY

似乎无法看到methodY的来源,它可能来自:

(1)objX的类,我们称它为ClassX
(2)objX的超类(ClassX),我们称它为SuperClassX
(3)名为ClassZ的类,ClassZobjX无关,但是存在从ClassXClassZ的隐式转换。

因此methodY的来源可能存在三种可能性,有人是否有关于如何找出methodY定义位置的想法?

换句话说,在Scala中,如何在运行时检查方法的信息(尤其是该方法来自隐式转换)?

最佳答案

有可能获得具有通过反射声明的方法的Class。用你的名字:

objX.getClass().getMethod("methodY").getDeclaringClass();

09-15 18:17