2011-01-30 128 views
3
trait PublicApi{ 

    def sayHi(from:String,content:String) 

} 

获取参数的名字我知道它在Java中是不可能在运行时 得到“从”和“内容”,但也斯卡拉清单帮我在这里?像定义从斯卡拉功能

trait PublicApi{ 

    def sayHi(from:String,content:String)(m:Manifest) 

} 

调用m.methodErasure.getArgumentName(0)将“从”

+0

lift-json用paranamer做一些值得一看的东西。 http://paranamer.codehaus.org/ – Monkey 2011-01-30 07:08:53

回答

7

斯卡拉“签名”确定包含这些参数名称,正如您正确猜测的那样。毕竟,他们必须被储存在的某个地方以使命名/默认参数起作用。您也可以使用scalap来查看这些名称。

请随时看看我的初步工作a reflection library

这是一项正在进行的工作,我对目前的功能设置或正确性做出了绝对的保证,但可能会给您一些关于涉及到的内容的想法 - 您甚至可以使用它来提取其参数名称当前状态。这也是我正在积极的工作,所以你可以期待它随着时间的推移而改进......

+0

我(有点无价值)upvoted你和VonC,他是最正确的,而你最有用的:P – 2011-01-31 03:58:37

8

将在其当前的实现,ClassManifest是所有关于type reification,并会一无所知参数名称。
除非你:

  • 在编译时增加对参数名的元数据
  • 或使用的削减版本ASM(Java字节码操作和分析框架)来提取在运行时类调试信息

,为paranamer没有(像Monkey提到在评论),你会不会对参数名称(至少不是Java 8.0之前的任何信息,即使它was initially mentioned for Java6!the proposal仍在进行中)

+0

作为附录,本地Scala反射库必须处理这个问题,因为它需要反映命名的方法参数。 – 2011-01-30 12:58:19