2

如何使用具有构造函数的抽象类在 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

4

1 回答 1

5

我不知道为什么要Wood扩展AbstractResource,但这有效:

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

case object Wood extends AbstractResource(0) {
  def apply(amount: Int) = {
    new AbstractResource(amount)
  }
}
于 2013-08-07T08:38:01.373 回答