Generic的访问方法,用于扩展特征

时间:2016-05-27 14:48:20

标签: scala generics traits

为了深入了解Scala,我使用了一个mysql包装器。没有生产的东西,只是试验。

我有一个特征,它指定了一个抽象方法:

trait EntityDefinition {
  def tableName: String
}

然后我有一个参数化类,我想访问tableName:

class FinagleRepository[T >: EntityDefinition] @Inject()(client: FinagleMysqlClient) {
  def create(entity: T): Future[Result] = {
    // Here it is impossible to call T.tableName
  }
}

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:3)

您目前正在为EntityDefinition定义Tlower bound,这意味着T应该是{{>超类型 EntityDefinition 1}}。您真正想要的是EntityDefinition成为T的{​​{3}},意味着T成为EntityDefinition子类型

class FinagleRepository[T <: EntityDefinition]