下面我有:
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
然后它可以工作,但目的没有解决。
有更好的方法吗??