如何在泛型函数中创建继承带值trait的case class实例
Scala 动态注入Session值到Case Class实例的问题
我有如下代码定义:
trait Session { val value: Option[String] = None } case class A(v: Int) extends Session case class B(v: Int, s: String) extends Session
需要实现injectSession函数,要求:
- 创建与入参
message同类型的新T实例 - 覆盖实例中的
value字段为传入的newSession值
函数签名如下:
def injectSession[T <: Session with Product](message: T)(implicit newSession: Option[String]): T = { //缺失代码 }
预期效果等价于手动编写:
new T (same_args) { override val value: Option[String] = newSession }
我尝试过使用scala-reflector,但只能生成参数相同的新实例,无法完成value的覆盖操作。测试调用示例:
implicit val session: String = "some-session" injectSession(A(5))(session)
背景说明:系统内有300多个类似A、B的case class,该需求用于单元测试场景。希望在不修改case class签名的前提下,仅通过extends关键字注入value,之后将实例作为消息在Actor系统中传递。
内容的提问来源于stack exchange,提问作者Oren
相关产品推荐
相关产品推荐

