trait PublicApi{
def sayHi(from:String,content:String)
}
我知道java中不可能在运行时获取“from”和“content” 但scala清单可以帮助我吗?比如定义
trait PublicApi{
def sayHi(from:String,content:String)(m:Manifest)
}
调用m.methodErasure.getArgumentName(0)将返回“from”
答案 0 :(得分:8)
在目前的实施中,ClassManifest
完全是type reification,并且对参数名称一无所知。
除非你:
,正如paranamer所做的那样(如评论中提到的Monkey),您将不会获得有关参数名称的任何信息(至少在Java 8.0之前没有,即使它{{3} }:was initially mentioned for Java6!仍在进行中)
答案 1 :(得分:7)
Scala“签名” DOES 包含这些参数名称,正如您所推测的那样。毕竟,它们必须存储某处才能使命名/默认参数正常工作。您也可以使用scalap查看这些名称。
请随意查看我在a reflection library的初步工作。
这是一项正在进行中的工作,我绝对不能保证当前的功能集或正确性,但可能会让您对所涉及的内容有所了解 - 您甚至可以使用它来提取当前的参数名称州。这也是我正在积极努力的事情,所以随着时间的推移,你可以期待它有所改善......