更多Scala类型问题

更多Scala类型问题,scala,types,Scala,Types,既然Kim Stebel知道了如何使用存在类型键入变量,我需要知道如何在继承中使用它们: 以下代码未编译: class PagingListModel(startPageNumber: Int, pageSize: Int, query: Query[Projection[_ <: Product]]) extends AbstractListModel { val itemStartNumber: Int = startPageNumber * pageSize val

既然Kim Stebel知道了如何使用存在类型键入变量,我需要知道如何在继承中使用它们:

以下代码未编译:

class PagingListModel(startPageNumber: Int, pageSize: Int, query: Query[Projection[_ <: Product]]) extends AbstractListModel {
    val itemStartNumber: Int = startPageNumber * pageSize
    val items: List[Product] = getPageData()

    override def getPageData(): List[Product] = {
        db withSession {
            return queryToQueryInvoker(query.drop(itemStartNumber).take(pageSize)).list
        }
    }
}

class PagingListModel(StartPagingUnmber:Int,pageSize:Int,query:query[Projection[\up>我对ScalaQuery的了解有限,但看起来应该对类进行参数化

class PagingListModel[T <: Product] (
  startPageNumber: Int,
  pageSize: Int,
  query: Query[Projection[T]]
) extends AbstractListModel {
  ...
}

class PagingListModel[T我认为这不能用存在类型来完成。它与类型参数一起工作:

class PagingListModel[T <: Product](... query: Query[Projection[T]]) {
  ...
  def getPageData(): List[_ <: Product] = ...
    queryToQueryInvoker(query.drop(itemStartNumber).take(pageSize)).list
}

类分页列表模型[T我已经想到了,但是当C构造查询时,如何使用它的type in作为类型参数呢?你不需要显式地使用type param。编译器会根据你作为参数提供的
投影的类型来为你确定它。看起来不错!这当然是一件我从来没有想到过的事情当我试图找出我的错误…
class PagingListModel[T <: Product](... query: Query[Projection[T]]) {
  ...
  def getPageData(): List[_ <: Product] = ...
    queryToQueryInvoker(query.drop(itemStartNumber).take(pageSize)).list
}
class PagingListModel(... query: Query[Projection[T]] forSome { type T <: Product })  {
  def getPageData(): List[_ <: Product] = ... {
    val i = queryToQueryInvoker(query.drop(itemStartNumber).take(pageSize))
    i.list
  }
}