在Scala中键入提取
我是
Scala和高级编程语言的新手.我尝试解决以下问题.
我有: val s: Seq[SomeMutableType[_]] 我假设序列中的所有元素都是相同的类型(但此时不知道哪一个). 我怎么称呼: def proc[T](v0: SomeMutableType[T],v1: SomeMutableType[T]) { /* ... */ } 喜欢的东西 proc(s(0),s(1)) 编译器抱怨:
我想到了那个协变的东西,但我不相信它在我的情况下是有道理的.当我说s(0)和s(1)属于同一类型时,我只想让编译器相信我!我通常通过一些转换来做这个,但我不能在这里强制转换为SomeMutableType [T],因为T由于擦除而未知.当然,我无法改变proc的定义. 解决方法
问题是你真的无法做出这样的保证.例如:
scala> import scala.collection.mutable.Buffer import scala.collection.mutable.Buffer scala> val s: Seq[Buffer[_]] = Seq(Buffer(1),Buffer("a")) s: Seq[scala.collection.mutable.Buffer[_]] = List(ArrayBuffer(1),ArrayBuffer(a)) 看到?您不知道s(0)和s(1)属于同一类型,因为它们可能不是同一类型. 此时,您应该问一个关于您想要完成什么的问题,而不是询问如何解决您想要完成它的问题.他们采取的方式将无法正常工作.退一步,想想你试图用这种方法解决的问题,并询问如何解决这个问题. 例如,你说:
您可能想要做的是参数化类或方法,并在声明s时使用其类型参数.或者,也许,根本就没有. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |