2013-06-19 196 views
2
class Test1(buf:Buffer[AnyRef]) 
class Test2(buf:Buffer[String]) extends Test(buf) 

编译器错误:为什么缓冲区[字符串]无法从缓冲区继承[AnyRef]

type mismatch; 
found : scala.collection.mutable.Buffer[String] 
required: scala.collection.mutable.Buffer[Any] 
Note: org.msgpack.type.Value <: Any, but trait Buffer is invariant in type A. You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10) 

回答

3

简短的回答:您不能添加到AnyRefBuffer[String]

val b: Buffer[AnyRef] = Buffer[String]() 
b += new Object // ??? 

Buffer[String]能不是Buffer[AnyRef],因为Buffer[T]对于类型参数T不是协变的。它不能被宣布为协变(Buffer[+T]),因为在逆变位置有T的用法(例如在+=方法中)。