考虑这段代码(这是一种类型安全单元):
abstract class UnitsZone {
type ConcreteUnit <: AbstractUnit
abstract class AbstractUnit(val qty: Int) {
SOME_ABSTRACT_MEMBERS
def +(that: ConcreteUnit): ConcreteUnit = POINT_OF_INTEREST.apply(this.qty + that.qty)
def apply(param: Int) = SOME_IMPLEMENTATION
}
def apply(qty: Int): ConcreteUnit
}
object Imperial extends UnitsZone {
type ConcreteUnit = Pound
class Pound(override val qty: Int) extends AbstractUnit(qty) {
CONCRETE_MEMBERS_HERE
}
def apply(qty: Int) = new Pound(qty)
}
为了使整个事情正常工作,我需要调用apply
外部对象相对于继承的方法(标记为兴趣点在上面的代码中)。考虑到这一点,我敢于提出几个问题:
- 有什么办法可以做到吗?
- 如果有很多,每一种的优点和缺点是什么?
- 如果您认为整个事情都是错误的,那么实现此类功能的正确方法是什么?
使用自我参考:
abstract class UnitsZone {
outer =>
type ConcreteUnit <: AbstractUnit
...
abstract class AbstractUnit(val qty: Int) {
def +(that: ConcreteUnit): ConcreteUnit = outer.apply(this.qty + that.qty)
...
}
}
参见章节17.自我参考 https://stackoverflow.com/tags/scala/infoSO Scala 教程的更多信息,了解此构造还允许您执行哪些操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)