Java静态嵌套类vs顶级类

时间:2013-10-30 22:54:25

标签: java static nested

我对何时制作Java类感到困惑:

  • 静态嵌套类
  • 同一个软件包中的顶级类
  • 另一个包中的顶级课程

例如

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

这是一个逻辑上很好的设计吗?它将对象放在逻辑层中。如果类没有以这种方式嵌套,则逻辑层会污染命名空间。学生可能去其他地方。为学生创建一个包可以让它变得更好吗?

这个结构应该嵌套还是展平?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

拼合。这看起来有点像你已经将实例封装的概念与命名空间混为一谈。学校实例可能包含许多对学生的引用,但没有理由认为学生类型应该在学校类型范围内。

  

学生可能指其他地方的学生服装。

除了学生之外,学生不应该有任何意义。它不应该与衣服无关。

  

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

是的,包是用于组织类型的容器。除非嵌套类型:

,否则不应以这种方式使用类型本身
  1. 与外部类型紧密结合,使其本身毫无意义。

  2. 一个共同的概念是以一种特定于外层的方式表现出来的。例如,Map.Entry适合作为嵌套的静态类型(接口),因为'entry'是一般概念,这种特殊类型的条目仅在处理地图时才有意义。

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

答案 2 :(得分:0)

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

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

可以在earlier StackOverflow question以及Nested Classes中找到两种嵌套类(静态和非静态,又名内部)的精彩概述} Java Tutorial

的部分