Scala:如何避免使用存在类型

时间:2019-05-04 15:59:12

标签: scala existential-type

假设我定义了一个特质

trait SomeTrait[A] {
  def doSomething(): Seq[A]
}

和扩展此特性的多个类,如下所示。

class SomeClass extends SomeTrait[SomeType] {

  def doSomething(): Seq[SomeType] = {
    :
  }

}

现在在另一个类中,我想存储扩展了特征的类的实例的集合。

class AnotherClass {
 pirvate val someClassInstances = mutable.Buffer[SomeTrait[_]]()
 def addSomeClass[A](sc: SomeTrait[A]): Unit = {
   this.someClassInstances += sc
 }
}

如何避免在这里使用存在性类型?

1 个答案:

答案 0 :(得分:0)

以下满足您的需求吗?

import scala.collection.mutable

trait SomeTrait[A] {
  def doSomething(): Seq[A]
}

class SomeClass extends SomeTrait[Int] {
  def doSomething(): Seq[Int] = ???
}

class AnotherClass {
  private val someClassInstances = mutable.Buffer[SomeTrait[_]]()
  def addSomeClass(sc: SomeTrait[_]): Unit = {
    this.someClassInstances += sc
  }
}