我可以在外部类中或在从外部类派生的类内部扩展内部类/特征。我可以扩展外部类的特定实例的内部类,如:
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
无论如何要扩展内部特征/类的内部类/特征而不引用外部特征/类?
我不打算在没有外部类的实例的情况下实例化派生的内部类,只声明它的类型。
答案 0 :(得分:8)
您可以使用self-type的特征来做类似的事情。例如,假设我们有以下内容:
class Outer(val x: Int) {
class Inner {
def y = x
}
}
我们希望在Inner
之前添加一些功能而不需要Outer
:
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
这不是你想要的,而是关闭。
答案 1 :(得分:3)
不完全是您正在寻找的,但具有路径依赖类型(可在2.10或2.9上使用-Ydependent-method-types标志,您可以这样做:
class Outer { class Inner {}; def create = new Inner }
def foo[T <: Outer](x: T) = x.create
希望有帮助