【发布时间】:2013-10-30 22:54:24
【问题描述】:
我对何时创建 Java 类感到困惑:
- 静态嵌套类
- 同一包中的顶级类
- 另一个包中的顶级类
例如
class School {
static class Grade {
static class Class {
static class Student {
}
}
}
}
这是一个逻辑上好的设计吗?它将对象放在逻辑层中。如果类没有以这种方式嵌套,逻辑层会污染命名空间。学生可能会去其他地方。为 Student 创建一个包会更好吗?
这个结构应该嵌套还是展平?
【问题讨论】:
-
一般来说,如果你只在外部类中使用那个特定的类,你可以将它保留为嵌套类。但是,为什么要在问题中创建这种层次结构是没有意义的。您可以将所有 Grade、Class、Student 设置为 School 内的嵌套类(如果您想坚持这种设计)
-
对此没有单一的答案。多个答案,谷歌搜索,见docs.oracle.com/javase/tutorial/java/javaOO/nested.html,stackoverflow.com/a/2148749/18573,http://stackoverflow.com/a/…有一些很好的信息
-
扁平化,如果您担心名称空间,请使用包。如果这些类开始包含大量内容,您的设计将是文件大小的恐怖。
-
@Ioan 不一定/只是,另一种情况是当嵌套类需要访问私有成员时,我想到的是不可变类的构建器模式。
-
@TC1 好吧,我认为你错了。如果内部类是静态的(嵌套的),它将无法访问其外部私有成员。 (仅限静态成员)