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

如何通过带抽象类型的Trait重构Scala多相似Case Class?

重构相似Case Class为公共Trait结构

你这个重构思路太赞了!把10个功能重复的case class整合到公共trait下,能极大减少冗余代码,还能让结构更清晰。下面是整理后的完整代码结构,以及各部分的作用说明:

// 通用属性容器,存储任意类型的属性值
trait Property[T] { val value: T }

// 公共的属性对结构,统一id和属性的组合
trait PropertyPair[T] { 
  val id: Long 
  val prop: Property[T] 
}

// 具体的Size属性类,复用PropertyPair结构,同时提供直观的size访问方法
case class Size(id: Long, prop: Property[Int]) extends PropertyPair[Int] { 
  def size: Int = prop.value 
}

// 具体的Title属性类,同理复用公共结构
case class Title(id: Long, prop: Property[String]) extends PropertyPair[String] { 
  def title: String = prop.value 
}

// 其他8个类似的属性类都可以按照这个模式实现

各部分的作用拆解:

  • Property[T]:作为通用的属性值容器,用泛型T支持不同类型的属性内容(比如Int、String、Boolean等),把属性值的存储逻辑抽离出来。
  • PropertyPair[T]:统一了id和属性的组合结构,所有具体的属性类都继承这个trait,避免每个case class都重复定义id字段。
  • 具体case class(如Size、Title):在复用公共结构的同时,保留了原来类的易用性——比如Size里的size方法,让调用者不用直接访问prop.value,和原来的API体验一致。

这样重构后,后续新增类似的属性类时,只需要照葫芦画瓢继承PropertyPair并添加对应的访问方法即可,维护成本低了很多!

内容的提问来源于stack exchange,提问作者Martee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:20