外部文件中的嵌套/内部类

Alp*_*Alp 35 java file external nested-class

我有一个类MyClass和一个MyNestedClass像这样的内部类:

public class MyClass {
  ...
  public class MyNestedClass {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这两节课都很长.因此,我想将它们分成两个不同的文件,而不会破坏层次结构.这是因为使用MyClass的程序员不应该看到嵌套类.

有没有办法实现这一目标?

x4u*_*x4u 21

您可以将内部类包设为私有,这意味着只能从完全相同的包中的其他类访问它.对于像java.lang或等标准JDK包中的隐藏类,这也经常发生java.util.

在pkg/MyClass.java中

public class MyClass {
  ...
}
Run Code Online (Sandbox Code Playgroud)

在pkg/MyHiddenClass.java中

class MyHiddenClass {

  final MyClass outer;

  MyHiddenClass( MyClass outer )
  {
      this.outer = outer;
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在,当您想要访问外部类的方法或变量时,您需要为它们添加前缀,outer.但是当您对外部实例的引用由编译器进行综合创建时,您将获得与之前基本相同的功能.

  • 不过,这在技术上并不是一个内在的阶级. (7认同)
  • `MyClass`的私有属性不能从`MyHiddenClass`中评估,而'MyHiddenClass`是受保护的,而不是私有的. (7认同)

osd*_*amv 7

我认为您有一个上帝对象或类似的东西,请考虑重构您的代码

http://en.wikipedia.org/wiki/God_object


ret*_*one 6

不能.Java源代码不能跨多个文件分割.你需要一个类似于C#中的部分类的构造,Java没有.


Op *_*kel 5

对象内部类保持到了括号类的对象含蓄地提及.如果嵌套类不是static(它是内部的)你不能.但是如果嵌套类不需要直接访问父类的实例并且不需要访问私有字段,那么重构就好了,将内部类移出并且不要将其声明为public(在该包之外不能被访问).