相关疑难解决方法(0)

如何通过Scala反射访问默认参数值?

让我们说一个班级:

case class Foo(id: Int, name: String, note: Option[String] = None)
Run Code Online (Sandbox Code Playgroud)

自动生成的伴随对象中的构造函数和apply方法都有三个参数.通过反射查看时,标记了第三个参数(注释):

p.isParamWithDefault = true
Run Code Online (Sandbox Code Playgroud)

此外,通过检查,我可以找到在伴随对象中生成值的方法:

method <init>$default$3
Run Code Online (Sandbox Code Playgroud)

method apply$default$3
Run Code Online (Sandbox Code Playgroud)

哪两个都有:

m.isParamWithDefault = true
Run Code Online (Sandbox Code Playgroud)

但是,我无法在TermSymbol上找到任何关于notes参数的内容,它实际上指向了正确的方法来获取默认值,也没有找到上述MethodSymbols中指向参数的TermSymbol的任何内容.

是否有直接的方法将参数的TermSymbol与生成其默认值的方法相关联?或者我是否需要做一些像检查伴侣对象上的方法名称一样的事情?

我对这里的case类构造函数示例和常规方法感兴趣.

reflection scala scala-2.10

14
推荐指数
1
解决办法
3495
查看次数

标签 统计

reflection ×1

scala ×1

scala-2.10 ×1