Arrays Scala数组泛型与向量泛型
因此,我一直在我的项目中进行重构,将代码中的Arrays Scala数组泛型与向量泛型,arrays,scala,generics,vector,types,Arrays,Scala,Generics,Vector,Types,因此,我一直在我的项目中进行重构,将代码中的向量转换为数组。原因是我的应用程序需要非常高的性能,在数组上使用while迭代比在向量上使用while迭代要快得多。(见附件) 然而,我遇到了一个问题,似乎很难找到答案。我对代码进行了调整,以隐藏实现细节,并将其归结为强调问题所需的代码 使用Vector时,以下类结构编译得非常好: sealed abstract class BaseClass { def element: Int } sealed abstract class Type
向量
转换为数组
。原因是我的应用程序需要非常高的性能,在数组
上使用while迭代比在向量
上使用while迭代要快得多。(见附件)
然而,我遇到了一个问题,似乎很难找到答案。我对代码进行了调整,以隐藏实现细节,并将其归结为强调问题所需的代码
使用Vector
时,以下类结构编译得非常好:
sealed abstract class BaseClass {
def element: Int
}
sealed abstract class TypeA extends BaseClass {
def element = 2
def children: Vector[BaseClass]
}
case class TypeB(element: Int = 2) extends BaseClass
case class TypeAA(children: Vector[TypeA]) extends TypeA
case class TypeAB(children: Vector[TypeB]) extends TypeA
现在,当从使用向量
切换到使用数组
时,它不再编译:
sealed abstract class BaseClass {
def element: Int
}
sealed abstract class TypeA extends BaseClass {
def element = 2
def children: Array[BaseClass]
}
case class TypeB(element: Int = 2) extends BaseClass
case class TypeAA(children: Array[TypeA]) extends TypeA
case class TypeAB(children: Array[TypeB]) extends TypeA
我得到一个错误:重写type=>Array[BaseClass]的TypeA类中的方法子类;值子级对于TypeAA和TypeAB类都具有不兼容的类型
我有一种感觉,我需要在某个地方进行隐式转换,但我对Scala比较陌生(只有几个月),不知道如何使用它
很抱歉,如果有人在其他地方问过这个问题,我很难找到正确的搜索词。我认为您需要使用
\up>这是因为向量[+A]
在其类型参数A
中是协变的,而数组[A]
不是协变的,这意味着A
您可以使用以下方法解决该问题:
密封抽象类TypeA[A:
问题在于数组
在Scala中是不变的,而向量
是协变的。这意味着Vector[TypeA]
是Vector[BaseClass]
的一个子类型,但是Array[TypeA]
不是Array[BaseClass]
的一个子类型。是的,对不起,我匆忙地回答了这个问题。问题在于泛型类型-您应该使用上限来实现这一点。是的,您的修订工作符合预期,非常感谢!非常感谢。我试图提高投票率,但由于帐户限制,未能提高投票率。我接受了安德烈的回答,因为他是第一个。谢谢你的帮助!
sealed abstract class TypeA[A :< Type[A]] extends BaseClass {
def children: Array[A]
}
case class TypeAA(children: Array[TypeA]) extends TypeA[TypeA]
case class TypeAB(children: Array[TypeB]) extends TypeA[TypeB]