Java中的模块化:顶级与嵌套类

an0*_*00b 5 java modularity nested

我读过的Java教程,比如使用嵌套类来演示概念,特性或用法.

这使我最初实现了一个我创建的示例项目:主活动类中有很多嵌套类.

它工作,但现在我有一个可怕的单片.java文件.我发现它有点不方便,我现在打算打破多个.java文件/类.

然而,在我看来,有时可能有理由从他们的封闭课堂上上课.

如果是这样,考虑到模块化和易维护性,保持模块大的原因是什么?

是否存在将嵌套类转换为顶级类是不切实际(甚至不可能)的情况?换句话说,是否只有嵌套类可以满足某些功能?

gpe*_*che 2

非静态嵌套类具有对封闭类的创建者实例的隐式引用,并且它还可以访问封闭类的每个成员(甚至是私有成员)。如果将嵌套类设置为顶级,则会丢失此内容:

public class Outer {
    private String s;

    public void setS(String s) {
        this.s = s;
    }

    public class Inner {
        public String getOuterS() {
            // This is legal only if Inner is
            // non-static and nested in Outer
            return s;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.setS("Hello world!!!");

        // i now has access to every o member
        Outer.Inner i = o.new Inner();

        // Prints "Hello world!!!"
        System.out.println(i.getOuterS());
    }
}
Run Code Online (Sandbox Code Playgroud)