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

Scala:扩展内部类,不涉及外部类

发布时间:2020-12-16 18:22:11 所属栏目:安全 来源:网络整理
导读:我可以在外部类中或在从外部类派生的类中扩展内部类/特征.我可以扩展外部类的特定实例的内部类,如下所示: class Outer{ class Inner{}}class OtherCl(val outer1: Outer){ class InnA extends outer1.Inner{}} 注意:即使这似乎编译得很好,产生了非常有趣的
我可以在外部类中或在从外部类派生的类中扩展内部类/特征.我可以扩展外部类的特定实例的内部类,如下所示:

class Outer
{
  class Inner{}
}

class OtherCl(val outer1: Outer)
{
  class InnA extends outer1.Inner{}
}

注意:即使这似乎编译得很好,产生了非常有趣的可能性:

trait OuterA
{ trait InnerA } 

trait OuterB
{ trait InnerB }

class class2(val outerA1: OuterA,val outerB1: OuterB)
{ class Inner2 extends outerA1.InnerA with outerB1.InnerB }

但这不会编译:

class OtherCl extends Outer#Inner

据我所知,我正在尝试扩展一个参数化类,其中type参数是外部类的一个实例,所以有一些影响

class OtherCl[T where T is instance of Outer] extends T.Inner

那么无论如何扩展一个内部类/特征,它在一个外部特征/类中,而不引用外部特征/类?

我不想在没有外部类的实例的情况下实例化派生的内部类,只声明它的类型.

解决方法

您可以使用具有 self-type的特征来执行类似的操作.例如,假设我们有以下内容:

class Outer(val x: Int) {
  class Inner {
    def y = x
  }
}

我们希望在没有外围的情况下向Inner添加一些功能:

trait MyInner { this: Outer#Inner =>
  def myDoubledY = this.y * 2
}

现在当我们实例化一个Inner时,我们可以在MyInner中混合:

scala> val o = new Outer(21)
o: Outer = Outer@72ee303f

scala> val i = new o.Inner with MyInner
i: o.Inner with MyInner = $anon$1@2c7e9758

scala> i.myDoubledY
res0: Int = 42

这不是你想要的,而是接近.

(编辑:李大同)

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

    推荐文章
      热点阅读