【发布时间】:2013-10-09 20:04:17
【问题描述】:
作为我的代码的简化版本:
abstract class GenX
case class X1 extends GenX
case class X2 extends GenX
...
class A {
val ab : LinkedList[X1] = LinkedList()
val ac : LinkedList[X2] = LinkedList()
...
def addX[T <: GenX]( x : GenX, clazz : T) =
getList(clazz) append LinkedList(x) // HERE complains
def getList(T <: GenX) (clazz : T) : LinkedList[_<: GenX] = clazz match {
case X1 => ab
case X2 => ac
...
}
}
我的意图是,当需要将 GenX 添加到 A 时,它可以将其类作为参数传递给通用添加,例如
case class X1 extends GenX{
def addToA(a : A) = a.addX(this, this getClass)
}
现在的问题是编译器抱怨 x 是 GenX 类型而不是 _$1 <: genx>
我不明白。
【问题讨论】:
-
个人笔记,我不认为
def addToA(a : A) = a.ab append LinkedList(this)是一个很好的解决方案,对于封装问题
标签: scala metaprogramming