You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在泛型函数中创建继承带值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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:00:01