加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Scala中引用内部类的外部对象

发布时间:2020-12-16 10:06:34 所属栏目:安全 来源:网络整理
导读:考虑这段代码(这是一种类型安全的单位): 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
考虑这段代码(这是一种类型安全的单位):

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)
}

为了使整个事情有效,我需要调用外部对象的继承方法(在上面的代码中标记为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)
    ...
  }
}

有关此构造允许您执行的其他操作的详细信息,请参阅SO Scala教程的第17. Self references章.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读