阅读 Ordesky 关于 Scala 的书的第 20 章,我发现内部类是路径相关的。在其他特性中,这意味着它们只能在外部类中实例化或提供外部类实例。
问题来了:我想在 Scala 中实现一个static inner class
,但作者建议这是不可能的。
我立即想到让“内部类”(我们称它为 Inner
)成为 Outer
的伴随对象的成员。
接受的答案this问题似乎指向那个方向。
但这导致了一个问题:Inner
的类型不是 Outer#Inner
,我可以尝试类似的方法:
object Outer {
class Inner extends Outer#Inner { }
}
但这不起作用。你知道这方面的工作吗? 我有预感可以用抽象类型来完成,但我不确定。
请注意,由于其类型,使 Inner
成为伴随对象的内部类并不完全等同于具有非路径依赖的 Inner
类。
最佳答案
I immediatelly thought of making the "inner class" (lets call it Inner) a member of Outer's companion object.
是的,这是最接近的 Scala 等价物。
But that drives to a problem: Inner's type ins't Outer#Inner
这不是问题,因为Outer#Inner
等同于Java 中Outer
的非静态 内部类。 IE。它有一个对 Outer
对象的引用。
I would like to get a inner class which is not path dependant or, at least, to know if that is possible
如果您想创建一个不能依赖于路径使用的非伴随内部类,这是不可能的。当然,您可以随时在代码中编写 Outer#Inner
而不是 o.Inner
。
关于java - 静态内部类与 Companion 的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26992209/