我有以下内容,我为不同的数据方案设置信息和提取器:
trait DataScheme {
type Type <: List[Any]
class ExtractorMethods(ticker: String, dataList: List[Type]) {
def getDatetime(datum: Type): Date = new Date(datum(columnIndex(Names.datetime)).toString)
def upperDatum(date: Date): Type = dataList.minBy(datum => getDatetime(datum) >= date)
def lowerDatum(date: Date): Type = dataList.maxBy(datum => getDatetime(datum) <= date)
}
}
trait IndexScheme extends DataScheme {
type Type = (Date, Double, Double, Double, Double, Long)
class ExtractorMethods(ticker: String, dataList: List[Type]) extends super.ExtractorMethods(ticker: String, dataList: List[Type]){
def testing12(int: Int):Int = 12
val test123 = 123
}
}
我想要任何扩展 DataScheme 以使用其 ExtractorMethods 方法(例如 lowerDatum)但也有自己的方法(例如 testing12)。
数据元素列表有一个类定义:
class Data[+T <: DataScheme](val ticker: String, val dataList: List[T#Type], val isSorted: Boolean)
(implicit m: Manifest[T], mm: Manifest[T#Type]) extends Symbols {
def this(ticker: String, dataList: List[T#Type])(implicit m: Manifest[T], mm: Manifest[T#Type]) = this(ticker, dataList, false)(m: Manifest[T], mm: Manifest[T#Type])
val dataScheme: T
val extractorMethods = new dataScheme.ExtractorMethods(ticker, dataList.asInstanceOf[List[dataScheme.Type]])
}
Data 类应该使方案的 ExtractorMethods 中的方法可以访问,以便它们可以通过已定义的 Data 实例在主程序中使用。例如,如果 sortedData 是 Data[IndexScheme] 的一个实例,则以下工作:
val lowerDatum = sortedData.extractorMethods.lowerDatum(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2010-03-31 00:00:00"))
但这不会:
val testing = sortedData.extractorMethods.testing12(123)
因为“测试 123 不是 sortedData.dataScheme.extractorMethods 的成员”。所以我的问题是如何使 IndexScheme 等 DataScheme 的子特征中的 ExtractorMethods 的子类可以访问?如何使用 Manifests 和 TypeTags?谢谢。