2013-06-19 145 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的用法(例如在+=方法中)。