更多Scala类型问题
既然Kim Stebel知道了如何使用存在类型键入变量,我需要知道如何在继承中使用它们: 以下代码未编译:更多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
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
}
}