我有很多代码使用Java反射来调用Java对象上的任意用户指定方法,作为DSL的一部分。
然而,实际上许多Java对象是Scala对象,并且其中一些方法带有Scala @deprecated
注释。不幸的是,Java的注释机制无法看到Scala注释,在Scala 2.10之前没有方便的方式(至少我不知道?)来获取这些注释。
我终于升级到了2.10,并希望能够从我的DSL中发出弃用警告。但是,我不想重写整个求值器(至少现在不想),以使用Scala反射,那么有没有一种方便的方法可以从java.lang.reflect.Method
转换为我可以在其上使用Scala反射的东西,以查找所涉及的Scala方法是否已被弃用?还是说我必须使用Scala反射复制大量现有的方法解析逻辑,才能获得该信息?
JavaToScala
的类,其中包含一个methodToScala
方法,可以完成我想要的功能。我能找到的唯一痕迹是here,在一个谷歌代码项目中。为什么这个功能被移出了核心反射?或者它是否仍然以不同的名称存在?编辑:看起来所涉及的代码位于
scala.reflect.runtime.JavaMirrors
中,但不幸的是它是私有的(还有另一个JavaMirrors
是公共API的一部分,但没有提供我需要的任何内容)。我无法弄清楚是否存在一条通过公共API进行调用的“路径”,可以将我带到深埋在私有JavaMirrors
中的私有methodAsScala
。这真是令人沮丧,至少可以这么说 :(
getDeclaredClasses()
来获取私有类。 - Denis Tulskiy