Java - 在其他文件中嵌套 类

Java - Nested classes in other files

我有类似的东西:

class Outer {
  // a lot of code...
  class Inner {
    // a lot of code...
  }
}

这正是我在技术方面想要的(我确实希望 Inner 是一个嵌套的非静态 class)。文件很长,我在这个项目中经常使用这样的模式。为了提高可读性,我想将外部 class 和内部 class 放在它们各自的文件中——但我应该将它们保留为 'Inner' 和 'Outer'(也就是说,内部 class 作为对外部 class 对象的访问,并且可以访问任何字段,包括私有字段)。

我想到的一个解决方案是把一个嵌套的接口放在另一个文件中继承。然而,基于 this question,嵌套接口似乎只能是静态的。

另请注意,此问题不是 this one: "putting nested classes in separate files" 的重复问题,因为该问题的目的是使嵌套的 class 取消嵌套。我希望内部 class 仍然是内部 class,只是在另一个文件中。

This question 是关于抽象内部 classes,但未指定该抽象 class 的子项是否也会被 JVM 视为内部。

这可能吗?如果可以,我该怎么做?

我不相信在单独的文件中有两个 class 的真正嵌套 class 是可能的。

我认为您可以获得的最接近的方法是将 "inner" class 中您想要访问的字段声明为 protected 而不是 private.这样你就可以从 "outer" class 访问它们,只要它们在同一个包中。请注意,这意味着包中的其他 class 也可以访问这些字段。

如果只有外部 class 可以访问字段很重要,我建议您只嵌套内部 class.

据我所知,无法将内部 class 放在单独的文件中并保持其特权位置。 Java 没有#include 类型语法。 Java 需要单个 class 到 "own" 一个 .java 文件,在本例中是您的外部 class。您不能从任何其他 .java 文件的外部 class 直接访问内部私人或本地人。

你最好的选择可能是将你内心 class 的部分移到它自己的 class 中,使其抽象化,并尽可能多地将逻辑移入其中。创建一个新的内部 class 并让它扩展新的独立 class 并让内部 class 实现任何需要访问外部 class 内部的东西将无法从外部访问。

一种方法是将您的 classes 移动到它们自己的包中,其中 Outer class 声明它想要与 Inner 共享的所有成员class 变为 package private(无访问修饰符)。

package some.pkg;

public class Outer{
    int sharedMember;

    // Other field, consturctors methods and so on
}

class Inner extends Outer{
    void doSomething(){
         int i = super.sharedMember;

         // Do something with it
    }
}

java 来源中的许多 class 已经这样做了。您仍然必须使用 Inner 扩展到 Outer class,但要使其工作