阅读Ordesky关于Scala的书的第20章,我发现内部类是路径依赖的。在其他功能中,这意味着它们只能在外部类中实例化或提供外部类实例。
问题出现了:我想在Scala中实现static inner class
,但作者认为这是不可能的。
我立刻想到了制造内心阶级" (让我们称之为Inner
)Outer
的伴侣对象的成员。
this问题的接受答案似乎指向了这个方向。
但这导致了一个问题:Inner
输入了Outer#Inner
,我可以尝试以下方法:
object Outer {
class Inner extends Outer#Inner { }
}
然而,这并不起作用。你知道这方面的工作吗? 我有预感,它可以用抽象类型完成,但我不确定。
请注意,将Inner
作为伴随对象的内部类并不完全与具有非路径相关的Inner
类一样,因为它的类型。
答案 0 :(得分:1)
我立刻想到了制造内心阶层" (我们称之为Inner)是Outer的伴侣对象的成员。
是的,这是最接近的Scala等价物。
但这引发了一个问题:内在的类型不在外#内
这不是问题,因为Outer#Inner
等同于Java中{em>非静态内部类Outer
。即它引用了Outer
对象。
我想获得一个不依赖路径的内部类,或者至少知道是否可能
如果你想创建一个非伴随的内部类,不能以路径依赖的方式使用,那是不可能的。当然,您可以随时在代码中编写Outer#Inner
而不是o.Inner
。