【问题标题】:Scala generics function callScala 泛型函数调用
【发布时间】:2019-01-23 13:13:48
【问题描述】:

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

【问题讨论】:

    标签: scala generics


    【解决方案1】:

    您还没有在Sample 中定义类型T

    重写您的 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)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 2021-02-21
      • 2022-01-25
      • 2012-03-05
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多