java - 静态内部类与 Companion 的内部类

标签 java scala oop inner-classes companion-object

阅读 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/

相关文章:

java - HostnameVerifier 和 DefaultHostnameVerifier 之间的区别

java - 如何通过内部映射中的参数查找 mongo 文档(最好使用 Spring MongoTemplate)

java - linux - 如何运行 selenium-server-standalone?

scala - 在 Spark 数据集中对数字字符串进行排序

scala - 重新开始的我的 Actor 所产生的 future 会发生什么

ios - 允许用户创建表单的应用程序

java - 无法访问字段 'property';要么更改其可见性,要么为其声明类型 gSON fromJson 编写自定义 TypeAdapter

scala - _._1 和 _++_ 在 Scala 中是什么意思(两个单独的操作)?

C++ 在堆栈中存储包含多态属性的类对象

Python __init__/General Function Inline Equals In Argument(s) :