3

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

问题出现了:我想static inner class在 Scala 中实现一个,但作者认为这是不可能的。我立即想到让“内部类”(让我们称之为Inner)成为Outer的伴随对象的成员。

这个问题的公认答案似乎指向了这个方向。但这会导致一个问题:Inner's type ins't Outer#Inner,我可以尝试类似:

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

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

请注意,由于其类型,创建Inner伴随对象的内部类并不完全等同于具有非路径依赖Inner类。

4

1 回答 1

1

我立即想到让“内部类”(我们称之为 Inner)成为 Outer 伴生对象的成员。

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

但这会导致一个问题:Inner 的类型不是 Outer#Inner

这不是问题,因为Outer#Inner它相当于Java中的非静态内部类。Outer即它有一个Outer对象的引用。

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

如果你想创建一个不能依赖路径使用的非伴随内部类,这是不可能的。当然,您可以自由地始终编写Outer#Inner而不是编写o.Inner代码。

于 2014-11-18T12:02:48.457 回答