Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Scala数组泛型与向量泛型_Arrays_Scala_Generics_Vector_Types - Fatal编程技术网

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]