小编Flo*_*her的帖子

在抽象类中推断应该可供编译器使用的多个泛型类型

我正在为我的play2/slick2项目开发一个抽象的CRUD-DAO.为了拥有方便的类型安全的主要ID我使用Unicorn作为额外的抽象和方便在光头MappedToColumnBaseType.

Unicorn提供了一个基本的CRUD-DAO类BaseIdRepository,我想进一步扩展它以满足项目的特定需求.班级的签名是

class BaseIdRepository[I <: BaseId, A <: WithId[I], T <: IdTable[I, A]]
  (tableName: String, val query: TableQuery[T])
  (implicit val mapping: BaseColumnType[I])
  extends BaseIdQueries[I, A, T]
Run Code Online (Sandbox Code Playgroud)

这导致DAO实现看起来像

class UserDao extends 
  BaseIdRepository[UserId, User, Users]("USERS", TableQuery[Users])
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是多余的.我能够提供tableNamequeryT我自己的抽象DAO给我以下签名

abstract class AbstractIdDao[I <: BaseId, A <: WithId[I], T <: IdTable[I, A]] 
  extends BaseIdRepository[I,A,T](TableQuery[T].baseTableRow.tableName, TableQuery[T])
Run Code Online (Sandbox Code Playgroud)

是否有可能在斯卡拉以某种方式推断类型IA做出类似以下可能的签名?(Users是一个类扩展IdTable)

class UserDao extends AbstractIdDao[Users]
Run Code Online (Sandbox Code Playgroud)

这可能没有运行时反射吗?如果仅通过运行时反射:如何在类定义中使用Manifest以及在响应式应用程序中对性能的影响有多大?

另外,因为我对这门语言还很陌生并独立工作:这是scala中的好习惯吗?

谢谢你的帮助.随意批评我的问题和英语.当然,改进将提交给Unicorn …

generics inheritance scala slick-2.0

11
推荐指数
1
解决办法
375
查看次数

标签 统计

generics ×1

inheritance ×1

scala ×1

slick-2.0 ×1