如何使用带构造函数的抽象类扩展Scala中的对象?

时间:2013-08-07 07:57:03

标签: scala

如何使用具有构造函数的抽象类扩展Scala中的对象,并且该对象的apply方法将该对象作为抽象的子类型返回?

例如:

abstract class AbstractResource(amount:Int) {
    val amount:Int
    def getAmount = amount
}


case object Wood extends AbstractResource{
    def apply(amount: Int) = {
        // something that returns the subtype
   }
}

我认为一个好的解决方案是:

abstract class AbstractResource {
    val amount: Int = 0

    def getAmount = amount
}


case object Wood extends AbstractResource {
    def apply(quantity: Int) = {
        new AbstractResource {
            override val amount = quantity
        }
    }
}

但我的问题是我无法编辑AbstractResource

1 个答案:

答案 0 :(得分:5)

我不知道为什么Wood应该延伸AbstractResource,但这有效:

class AbstractResource(val amount:Int) {
  def getAmount = amount
}

case object Wood extends AbstractResource(0) {
  def apply(amount: Int) = {
    new AbstractResource(amount)
  }
}