首页 > 解决方案 > 创建一个 Trait 只是为了指定一个合同而不是从多态的角度使用它是否可以?

问题描述

所以,假设我有以下形式的特征 -

trait QueryBuilder {
  def build(filters: Seq[CustomFilter]): CustomDBQuery
}

有了这个,我希望建立一个抽象,它说任何查询构建器都应该符合这个合同。

现在,假设我有一个SeriesQueryBuilder这样的定义,它有自己的build()方法实现 -

object SeriesQueryBuilder extends QueryBuilder {
  override def build(filters: Seq[CustomFilter]): CustomDDBQuery = ???
}

现在,我的问题是 - 我不想传递QueryBuilder其他方法,而是只传递子类型的特定具体实例。在这种情况下,QueryBuilder仅仅为了强制执行“查询构建器”应该遵循的合同而首先拥有该特征是错误的吗?为了概括它,我们还假设该特征没有任何对所有查询构建器都通用的方法。

标签: scalaclasstraitsclass-design

解决方案


推荐阅读