静态内部类vs Companion的内部类

时间:2014-11-18 10:37:41

标签: java scala oop inner-classes companion-object

阅读Ordesky关于Scala的书的第20章,我发现内部类是路径依赖的。在其他功能中,这意味着它们只能在外部类中实例化或提供外部类实例。

问题出现了:我想在Scala中实现static inner class,但作者认为这是不可能的。 我立刻想到了制造内心阶级" (让我们称之为InnerOuter的伴侣对象的成员。

this问题的接受答案似乎指向了这个方向。 但这导致了一个问题:Inner输入了Outer#Inner,我可以尝试以下方法:

object Outer {
    class Inner extends Outer#Inner { } 
}

然而,这并不起作用。你知道这方面的工作吗? 我有预感,它可以用抽象类型完成,但我不确定。

请注意,将Inner作为伴随对象的内部类并不完全与具有非路径相关的Inner类一样,因为它的类型。

1 个答案:

答案 0 :(得分:1)

  

我立刻想到了制造内心阶层" (我们称之为Inner)是Outer的伴侣对象的成员。

是的,这是最接近的Scala等价物。

  

但这引发了一个问题:内在的类型不在外#内

这不是问题,因为Outer#Inner等同于Java中{em>非静态内部类Outer。即它引用了Outer对象。

  

我想获得一个不依赖路径的内部类,或者至少知道是否可能

如果你想创建一个非伴随的内部类,不能以路径依赖的方式使用,那是不可能的。当然,您可以随时在代码中编写Outer#Inner而不是o.Inner