class Person(name: String, age: Int, numThings: Option[Int] = Some(15))
我可以使用 Scala 反射来获取案例类的默认值,如下所示:
val companionType: Type = classSymbol.companion.typeSignature
val companionObject = currentMirror.reflectModule(classSymbol.companion.asModule).instance
val companionMirror = currentMirror.reflect(companionObject)
val defaultValueAccessorMirror =
if (member.typeSignature.typeSymbol.isClass) {
val defaultValueAccessor = companionType.member(TermName("apply$default$" + (index + 1)))
if (defaultValueAccessor.isMethod) {
Some(companionMirror.reflectMethod(defaultValueAccessor.asMethod))
} else {
None
}
} else {
None
}
这将获得生成的伴随对象中的方法,该方法在调用时会产生默认值。可悲的是,非案例类似乎没有此功能。
如何使用 Scala 或 Java 反射在上面的示例中获取 Person.numThings 的默认值?
有只小跳蛙
相关分类