0

I'm confused about when to make a Java class a:

  • Static nested class
  • Top-level class in the same package
  • Top-level class in another package

For example

class School {
    static class Grade {
        static class Class {
            static class Student {
            }
        }
    }
}

Is this a logically good design? It puts objects in logical layers. If classes aren't nested in this way, the logical layers pollute the namespace. A student may go elsewhere. Would creating a package for Student make it better?

Should this structure be nested or flattened?

4

3 回答 3

2

在我看来:扁平化。因为学生不会永远留在同一个班级。

于 2013-10-30T23:05:49.347 回答
1

展平。这看起来有点像您将实例封装的想法与命名空间混为一谈。School 实例可能包含对 Student 的许多引用,但没有理由将 Student类型限定在 School 类型内。

学生可能意味着其他地方的学生衣服。

Student 不应该意味着除student以外的任何东西。它不应该与衣服无关。

如果我们为他们创建一个包,它会好一点。

是的,包是组织类型的容器。除非嵌套类型,否则不应以这种方式使用类型本身:

  1. 与外部类型的耦合如此紧密,以至于它本身毫无意义。

  2. 是一个通用概念,以特定于外部类的方式表现出来。例如,Map.Entry适合作为嵌套的静态类型(接口),因为“条目”是一个通用概念,并且这种特定类型的条目仅在处理映射时才相关。

  3. 仅在其外部类中使用,并且在其外部不可见(或至少在包外部不可见)。

于 2013-10-30T23:06:02.867 回答
0

当您想从其他类中“隐藏”它们的代码,或者当您想将该代码与封闭类相关联时,嵌套静态类通常很好。

它们不常用于您​​的示例中的多级封装,或者当它们相当大(例如,超过 100-200 行)时,因为它们变得难以维护。在这种情况下,您应该更好地使用包。

可以在较早StackOverflow问题以及.Java Tutorial

于 2013-10-30T23:06:54.140 回答