Mys*_*Dan 8 reflection scala scala-java-interop
作为DSL的一部分,我有很多代码使用Java反射来调用Java对象上的任意用户指定方法.
但是,实际上很多Java对象都是Scala对象,并且它们上的一些方法都标有Scala @deprecated注释.不幸的是,Java的注释机制无法看到Scala注释,直到Scala 2.10没有方便的方式(我知道?)才能访问这些注释.
我最终升级到2.10,并希望能够从我的DSL发出弃用警告.但是,我不想重写整个评估器(至少现在)使用Scala反射,所以有一种方便的方法从一个java.lang.reflect.Method我可以使用Scala反射的东西来弄清楚Scala方法是否在问题已被弃用?或者,在获取该信息之前,我是否必须使用Scala反射复制许多现有的方法解析逻辑?
它看起来像一个JavaToScala曾经存在于Scala反射中的类,它有一个methodToScala方法可以实现我想要的.在谷歌代码项目中,我能找到的唯一痕迹就在这里.为什么功能移出核心反射?或者它仍然以不同的名称存在?
编辑:看起来有问题的代码存在scala.reflect.runtime.JavaMirrors,但不幸的是它是私有的(有另一个JavaMirrors是公共API的一部分,但不提供我需要的任何东西.)我无法弄清楚它的生命如果有一个通过公共API进行调用的"路径",那么我就会把我一直带到私有的methodAsScala深处JavaMirrors.令人沮丧的是,至少可以说:(
这是一个快速修复(归功于@EugeneBurmako)
https://gist.github.com/xeno-by/5277805
已为此提出了一个问题(归功于@MysteriousDan):
https://issues.scala-lang.org/browse/SI-7317
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |