在Scala中实例化类型参数类的最佳方法

时间:2014-02-08 16:07:47

标签: list scala instantiation typeclass empty-list

我希望有一个Queue类,可以像列表一样使用。

例如,

val q = Queue()

将实例化一个空队列。

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

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

这是正确的方法吗?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:3)

如果您想在不使用new的情况下初始化对象,那么在随播广告中使用apply()作为工厂方法绝对是正确的方法。

您可能还想考虑更具体的工厂(或工厂)来帮助您的代码更加自我记录。

object Queue {
  def apply[T](xs: T*) = new Queue(xs: _*)
  def empty[T] = new Queue[T]()
}