gpt4 book ai didi

scala - 为什么 Buffer[String] 不能从 Buffer[AnyRef] 继承

转载 作者:行者123 更新时间:2023-12-04 04:52:48 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why doesn't the example compile, aka how does (co-, contra-, and in-) variance work?

(4 个回答)


7年前关闭。



class Test1(buf:Buffer[AnyRef])
class Test2(buf:Buffer[String]) extends Test(buf)

编译器错误:
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)

最佳答案

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

val b: Buffer[AnyRef] = Buffer[String]()
b += new Object // ???
Buffer[String]不能是 Buffer[AnyRef]因为 Buffer[T]在类型参数 T 上不是协变的.它不能被声明为协变( Buffer[+T] ),因为有 T 的用法在逆变位置(例如在 += 方法中)。

关于scala - 为什么 Buffer[String] 不能从 Buffer[AnyRef] 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com