的類型,下面我有:列表按照參數
trait Elem {
def compare: Int
}
case class DiffElem(weight: Int, len: Int) extends Elem {
def compare = weight - len;
}
現在可以有ELEM的很多子類的基礎上,compare
功能。 現在我有一個功能,即從文件讀取輸入並生成DiffElem
列表:
def getInput[T <: Elem](): List[T] = {
var ans: List[T] = List.empty[T]
for (line <- Source.fromFile("src/week1/jobs.txt").getLines()) {
val diff = line.split(" ")
ans = ans match{
case i:List[DiffElem] => new DiffElem(Integer.parseInt(diff(0)), Integer.parseInt(diff(1))) :: ans;
case _ => ???
}
}
ans
}
但是編譯器不允許的操作,顯然爲::
如下禁忌變異型,我試圖做的不變性。如果我的函數簽名轉換爲T >: Elem
那麼它的工作原理,但目的不就解決了。
任何更好的辦法?
有了這個,它會創建DiffElem列表。如果存在着擴展ELEM另一個類,我想創建一個列表?我嘗試通過模式匹配來完成ti,基於通用類型,我可以生成列表 – Jatin
Hm,是否需要某種類型驅動的列表創建:使用帶顯式類型參數的getInput來獲取不同類型的列表(像getInput [DiffElem]()來獲得DiffElem的和getInput [AnotherElem()來獲得AnotherElems列表)名單? – aemxdp
是的,正是如此。 – Jatin