Scala泛型函数调用

时间:2019-01-23 13:13:48

标签: scala generics

我在scala中具有以下特征:

trait BaseDao {

 type T <: BaseModel

 def saveModel(model: T)

}

我创建了一个扩展BaseDao的类:

 class Sample (dynamoDBMapper: DynamoDBMapper) extends BaseDao with LazyLogging {
 checkNotNull(dynamoDBMapper)

 protected def classType: Class[T] = implicitly[ClassTag[T]].runtimeClass.asInstanceOf[Class[T]]

 override def saveModel(model: T): Unit ={
   model.validate()

   dynamoDBMapper.save(model)
 }

现在,当我创建上述类的实例并尝试调用save方法时:

    val testModel = new TestModel();
    testModel.setHashKey("a")
    testModel.setSortKey("b")
    testModel.setCreatedOn(new Date())
    testModel.setModifiedOn(new Date())

    sample.saveModel(testModel)

它给出以下错误:

Type mismatch expected: Sample#T, actual: TestModel model class extends BaseModel class

我是Scala的新手,我无法弄清楚这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

您尚未在T中定义类型Sample

重写您的Sample类,使其看起来像这样:

class Sample (dynamoDBMapper: DynamoDBMapper) extends BaseDao with LazyLogging {

  checkNotNull(dynamoDBMapper)

  type T = TestModel

  override def saveModel(model: T): Unit ={
   model.validate()

   dynamoDBMapper.save(model)
  }
}