我有很多代码一直在使用Java反射来调用Java对象上用户指定的任意方法,这是DSL的一部分。
然而,在实践中,这些Java对象中有很多是Scala对象,它们上的一些方法用Scala @deprecated注释进行了标记。不幸的是,Java的注解机制不能看到Scala注解,而且在Scala2.10之前没有方便的方法(据我所知?)才能访问这些注释。
我终于升级到了2.10,并且希望能够从我的DSL发出弃用警告。但是,我不想重写整个计算器(至少现在)来使用Scala反射,所以有没有一种方便的方法可以从java.lang.reflect.Method转换成我可以使用Scala反射的东西,以确定有问题的Scala方法是否被弃用?或者,我是否必须使用Scala反射复制大量现有的方法解析逻辑,然后才能获得该信息?
它看起来像是一个曾经存在于Scala反射中的JavaToScala类,里面有一个methodToScala方法,可以做我想要的事情。我能找到的唯一踪迹是谷歌代码项目中的here。为什么要将功能移出核心反射?或者它仍然以不同的名字存在?
编辑:看起来有问题的代码仍然存在于scala.reflect.runtime.JavaMirrors中,但不幸的是它是私有的(还有另一个JavaMirrors是public API的一部分,但没有提供我需要的任何东西)。我怎么也想不出是否有一条通过公共API进行调用的“路径”,它会把我一直带到隐藏在私有methodAsScala中的私有JavaMirrors。这是令人沮丧的,至少可以这么说:
发布于 2013-05-03 07:01:19
https://stackoverflow.com/questions/15712097
复制相似问题