为了深入了解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
}
}
谁能告诉我我做错了什么?
答案 0 :(得分:3)
您目前正在为EntityDefinition
定义T
为lower bound,这意味着T
应该是{{>超类型 EntityDefinition
1}}。您真正想要的是EntityDefinition
成为T
的{{3}},意味着T
成为EntityDefinition
的子类型 :
class FinagleRepository[T <: EntityDefinition]