【发布时间】:2019-08-11 14:44:36
【问题描述】:
我在 Scala 中有这种特征和类的层次结构:
trait A
trait B[T] extends A {
def v: T
}
case class C(v:Int) extends B[Int]
case class D(v:String) extends B[String]
val l:List[A] = C(1) :: D("a") :: Nil
l.foreach(t => println(t.asInstanceOf[B[_]].v))
我无法更改类型层次结构或列表类型。
有没有更好的方法来避免 asInstanceOf[B[_]] 语句?
【问题讨论】:
-
您能否从一开始就将列表
l声明为List[B[_]],而不是将其明确声明为List[A]? -
如果您不能更改列表的类型,您如何确定所有实例都是
B类型?如果任何实例的类型不是B,会发生什么?忽略它并继续?异常失败? -
我无法更改列表的类型。如果某些东西不是 B 类型,请忽略。
标签: scala generics scala-collections