我在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的新手,我无法弄清楚这里出了什么问题?
答案 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)
}
}