用泛型trait扩展对象



我正在使用Scala,我想用trait扩展一个(单例)对象,它提供了一个数据结构和一些方法,像这样:

trait Tray[T] {
  val tray = ListBuffer.empty[T]
  def add[T] (t: T) = tray += t
  def get[T]: List[T] = tray.toList
}

然后我想把这个特征混合到一个对象中,像这样:

object Test with Tray[Int]

addget存在类型不匹配:

Test.add(1)
// ...

我怎样才能使它工作?或者我错在哪里?

问题是您在addget方法上使用T遮蔽了trait的类型参数。关于这个问题的更多细节,请看我的回答。

正确的代码如下:

trait Tray[T] {
  val tray = ListBuffer.empty[T]
  def add (t: T) = tray += t      // add[T] --> add
  def get: List[T] = tray.toList  // get[T] --> add
}
object Test extends Tray[Int]

注意,在对象定义中使用了extends——请参阅规范的5.4节,了解为什么单独使用with在这里不起作用。

最新更新