如何使用具有构造函数的抽象类扩展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
答案 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)
}
}