答案 0 :(得分:2)
答案 1 :(得分:2)
答案 2 :(得分:2)
答案 3 :(得分:0)
感谢您的回答,他们是最有帮助的&真的帮助了我的理解。 我发现的一种替代解决方案如下。 AbsType不需要是基类,您可以使用它来包装参数化类型定义。
class ANode[T <: AbsTypes](
val akey : T#TKey,
val aval : T#TValue
) extends INode[T]
{
def get(key : TKey) : TValue = { aval }
def set(key : TKey, v : TValue) : Node = {
new ANode[T](key,v)
}
def combine(other : Node, key : TKey) : Node = {
other.set(key, aval) // "use" this & other somehow
}
}
// Examples
class AbsTypeDef[TKey1, TValue1] extends AbsTypes
{
type TKey = TKey1
type TValue = TValue1
}
object ANode
{
type AIntString = AbsTypeDef[Int,String]
type AStringLong = AbsTypes { type TKey = String; type TValue = Long}
def n1 = new ANode[AIntString](1,"one")
def n1b = new ANode[AIntString](2,"two")
def n2 = new ANode[AStringLong]("two",2L)
n1.combine(n1b,2)
//n1.combine(n2,2) // compile error
}