Scala语言规范版本2.8的4.6.2节描述了重复的参数,并说:
参数部分的最后一个值参数可以以"*"为后缀,例如(...,x:T*).然后,方法中的这种重复参数的类型是序列类型scala.Seq [T].
但是,这段代码:
abstract class A { def aSeq : Seq[A] }
class B(val aSeq : A*) extends A
class C extends B { override val aSeq :Seq[A] = Seq() }
Run Code Online (Sandbox Code Playgroud)
编译时出错:
overriding value aSeq in class B of type A*; value aSeq has incompatible type
Run Code Online (Sandbox Code Playgroud)
编译器似乎表明A*是与Seq [A]不同的类型.
在这种情况下调查aSeq的实际类显示它是scala.collection.mutable.WrappedArray $ ofRef的实例,但即使以下代码也无法使用相同的消息进行编译:
class C extends B { override val aSeq = new ofRef(Array[A]()) }
Run Code Online (Sandbox Code Playgroud)
所以问题是,如何覆盖由类上重复参数定义的成员?
如果你想知道它来自何处,那就是exalaly scala.xml.Elem 在scala.xml.Node中覆盖子方法的作用.
scala ×1