在不使用包对象的情况下将类型别名转换为泛型类型

时间:2015-09-21 19:27:45

标签: scala generics akka type-alias

我正在编写一个与通常的List集合类似的存储库actor,但是在删除时没有将元素向左移动一个位置。因此使用数组。 此存储库可以容忍的唯一类型是扩展Actor和Indexable类型的类型。我想使用Type Alias作为此类型条件的快捷方式。如何在不使用包对象的情况下将类型别名转换为类声明中的泛型类型,如下所示? (见第2行和第7行)

onResume()

1 个答案:

答案 0 :(得分:0)

如何在伴侣对象中声明类型别名:

import akka.actor.{Props, Actor}
import IndexableRepository._

final class IndexableRepository[T <: Mob](val capacity : Int) extends Actor {
  private var indexables = new Array[Mob](capacity)

  def receive : Actor.Receive = {
    case _ => unhandled()
  }

  private def findAvailable(indexables : Seq[Mob]) = {
    (0 to indexables.size) find { idx => indexables(idx) == null }
  }
}

object IndexableRepository {
  type Mob = Actor with Indexable

  def create[T <: Mob](capacity : Int) = Props(new IndexableRepository[T](capacity))
}

尽管如此,我认为Actor个实例并不意味着可以在任何地方引用。将它们存储在一个集合中看起来有点可疑。