0

我想要一个可以像列表一样使用的 Queue 类。

例如,

val q = Queue()

将实例化一个空队列。

为此,我尝试使用伴随类:

object Queue {
    def apply() = new Queue[Any]
}

这是正确的方法吗?

4

2 回答 2

6

使用apply伴生对象的方法是正确的做法,但您也可以在apply自身上添加类型参数:

object Queue {
    def apply[T]() = new Queue[T]
}

这样您就可以创建Queue正确类型的:

val q = Queue[Int]()

通常您还允许在创建时填充序列,以便可以推断元素类型,如下所示:

def apply[T](elms: T*) = ???

这样你就可以做到:

val q = Queue(1,2,3) // q is a Queue[Int]
于 2014-02-08T16:27:11.677 回答
3

是的。

如果你想在不使用的情况下初始化一个对象new,那么apply()在同伴中使用作为工厂方法绝对是正确的方法。

您可能还想考虑一个更具体的工厂(或多个工厂),以帮助您的代码更具自我记录性。

object Queue {
  def apply[T](xs: T*) = new Queue(xs: _*)
  def empty[T] = new Queue[T]()
}
于 2014-02-08T16:30:02.753 回答