Scala中的实例类型参数化

Scala中的实例类型参数化,scala,generics,Scala,Generics,来自Java,我正在尝试开发简单的SQL生成器,以下是代码的基本部分: 抽象类模型(valid:Long) 特征发生器[A]{ def insert(model:A,ret:Boolean=false):字符串 } 特质交易者{ def insert[A这里的问题是,当您编写查询:List[(我不明白为什么您有模型的类型参数,为什么您有模型作为类型A,如果它将永远只是模型或模型的后代。我会放弃所有的复杂性与泛型,因为它似乎在这种情况下是多余的。感谢伟大的答案! Transactor.scala:

来自Java,我正在尝试开发简单的SQL生成器,以下是代码的基本部分:

抽象类模型(valid:Long)
特征发生器[A]{
def insert(model:A,ret:Boolean=false):字符串
}
特质交易者{

def insert[A这里的问题是,当您编写
查询:List[(我不明白为什么您有模型的类型参数,为什么您有模型作为类型A,如果它将永远只是模型或模型的后代。我会放弃所有的复杂性与泛型,因为它似乎在这种情况下是多余的。感谢伟大的答案!
Transactor.scala:27: error: type mismatch;
 found   : kv._1.type (with underlying type _$1)
 required: _$2
      kv._2 insert kv._1 
abstract class Model(val id: Long)

trait Sqlizer[A] {
  def insert(model: A, ret: Boolean = false): String
}

trait Transactor {
  def insert[A <: Model](row: (A, Sqlizer[A])): Transactor

  def commit(): Boolean
}

object Transactor {
  def apply() = new DefaultTransactor
}

case class Op[T <: Model](model: T, sqlizer: Sqlizer[T]) {
  def insert = sqlizer.insert(model)
}

class DefaultTransactor extends Transactor {
  private var queries: List[Op[_ <: Model]] = List()

  def insert[A <: Model](row: (A, Sqlizer[A])): Transactor = {
    queries = queries :+ Op(row._1, row._2)
    this
  }

  def commit(): Boolean = {
    val body = queries map { kv =>
      kv.insert
    }

    true
  }
}