gpt4 book ai didi

scala - 为什么我不能将 map 向下转换为键是原始 map 键的子类型的类型

转载 作者:行者123 更新时间:2023-12-01 12:45:26 25 4
gpt4 key购买 nike

为什么会失败:

val h = new collection.mutable.HashMap[Integer,String]()
val g:collection.mutable.HashMap[Number,String] = h

成功时:

 val i:Integer = 10
val n:Number = i

val g:collection.mutable.HashMap[Number,String] = h.asInstanceOf[ collection.mutable.HashMap[Number,String] ] 

总是有正确的行为(对于 g)。

h 的键对象保证与 g 的键具有相同的行为,因此将 h 用作 g 似乎总是安全的。那么为什么编译器不允许这种类型转换?

最佳答案

Map 的键类型不是协变的。如果你检查 scaladoc,immutable map 的类型声明是 Map[A, +B](注意 A 没有 +)。原因是假设编译器允许你从hg的赋值,那么就可以写成如下:

g.get(1.234)

因为 1.234 是一个 Number。然而 g 实际上是 h,而 h 只期望键是整数。

出于类似的原因,如果您的 map 是可变的(就像您的一样),那么值类型也不是协变的。

关于scala - 为什么我不能将 map 向下转换为键是原始 map 键的子类型的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557711/

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