单个文件中多个顶级Java类的用例?

Ste*_*mon 5 java nested

Java中的非嵌套类是否合法使用?例如:

MyClass.java:

final class NonNestedClass {
    ...
}

public class MyClass {
    private NonNestedClass nonNested;
    ...
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这相当于在MyClass下有一个静态嵌套类.NonNestedClass无法访问MyClass的字段.有没有区别,更重要的是,这种范式是否合法使用?

And*_*mas 3

有什么区别吗[?]

是的。

非嵌套类,即使在同一个文件中,也是一个独立的顶级类。它与文件的同名类没有特殊关系。

嵌套类可以访问它们所嵌套的类的成员,反之亦然。(如果嵌套类是static,则它需要外部类的实例才能访问该实例的字段。)

可以通过名称从其他编译单元访问嵌套类。但通常只能从其他编译单元通过名称访问同名的顶级类。

更重要的是,这种范式是否有合法用途?

在版本 1.1 中引入嵌套类之前,它支持与用 Java 1.0 编写的文件向后兼容。那是大约20年前的事了。这种情况并不经常出现。

除此之外,我个人从未发现需要它。典型的模式是将类及其辅助类放在一个文件中。

参考