Art*_*ykh 3 inheritance scala inner-classes abstract-type
考虑这段代码(这是一种类型安全的单位):
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)
}
Run Code Online (Sandbox Code Playgroud)
为了使整个事情有效,我需要调用apply
外部对象的继承方法(在上面的代码中标记为POINT_OF_INTEREST).考虑到这一点,我敢问几个问题:
使用自我参考:
abstract class UnitsZone {
outer =>
type ConcreteUnit <: AbstractUnit
...
abstract class AbstractUnit(val qty: Int) {
def +(that: ConcreteUnit): ConcreteUnit = outer.apply(this.qty + that.qty)
...
}
}
Run Code Online (Sandbox Code Playgroud)
有关此构造允许您执行的其他操作的更多信息,请参见第17章SO Scala教程的自我引用.
归档时间: |
|
查看次数: |
3222 次 |
最近记录: |