Scala中如何打印传入类函数的NetConfig样例类参数值?
正确打印NetConfig实例所有值的方法
你之前的操作错误在于混淆了类本身和类的实例对象:
NetConfig是类的名称,直接打印它只会输出类的标识字符串;NetConfig.domain试图访问类的静态成员,但domain是NetConfig实例的成员,并非类的静态属性。
方法1:直接打印实例(利用样例类默认特性)
Scala的样例类会自动生成包含所有成员值的toString方法,你只需要打印传入的net实例即可:
final class CSRFRequestHandler(net: NetConfig) { // 直接打印net实例,会输出所有成员的键值对 println(net) }
输出格式类似:NetConfig(NetDomain(...), NetDomain(...), BaseUrl(...), ...),会完整展示每个字段的具体值。
方法2:用Play框架Json序列化(结构化美观输出)
如果使用Play框架,可以借助Play Json将实例序列化为JSON格式,输出更易读:
- 先为
NetConfig及嵌套类(如NetDomain、RateLimit等)生成Json格式隐式转换(用Play的Json.format宏自动生成):
import play.api.libs.json._ object NetConfig { implicit val format: OFormat[NetConfig] = Json.format[NetConfig] // 需为所有嵌套类生成对应format implicit val netDomainFormat: OFormat[NetDomain] = Json.format[NetDomain] implicit val rateLimitFormat: OFormat[RateLimit] = Json.format[RateLimit] // 其他嵌套类同理补充 }
- 在处理器中序列化并打印:
final class CSRFRequestHandler(net: NetConfig) { println(Json.prettyPrint(Json.toJson(net))) }
会输出格式化后的JSON字符串,每个字段的结构和值都清晰呈现。
方法3:手动打印指定字段
如果只需要打印部分字段或自定义输出格式,直接访问实例的成员即可:
final class CSRFRequestHandler(net: NetConfig) { println(s"Domain: ${net.domain}, BaseUrl: ${net.baseUrl}, IsProd: ${net.isProd}") }
内容的提问来源于stack exchange,提问作者gwhiz
相关产品推荐
相关产品推荐

