相关疑难解决方法(0)

覆盖Scala中重复的类参数?

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

7
推荐指数
1
解决办法
872
查看次数

标签 统计

scala ×1