你能解释一下这个简单例子中的错误吗?
class C1 (val id: Int)
abstract class C2 [T] {
def m1 [T]
}
class C3 [C1] extends C2
{
override
def m1 (obj: C1) {
println (obj.id)
}
}
我有:value id不是类型参数C1的成员 为什么呢?
答案 0 :(得分:6)
通过编写class C3[C1]
,您说C3采用名为C1
的类型参数。因此,在C3
的类定义中,类名C1
引用的是类型参数,而不是类C1
。
您可能想写的是class C3 extends C2[C1]
(即您将C1类作为C2的类型参数传递)。
答案 1 :(得分:4)
您的示例中有几件事情在起作用。以下是修改后的示例:
class C1 (val id: Int)
abstract class C2 [T] {
// don't repeat [T] and the method takes an arg
// within C2, T refers to the type parameter
def m1(t:T)
}
class C3 extends C2[C1] { // if in REPL put the brace on the same line
// no override when implementing abstract
def m1(obj:C1) { println(obj.id) }
}
这应该编译(并在REPL中运行)。