繁体   English   中英

Java静态嵌套类与顶级类

[英]Java static nested class vs top level class

我对何时创建Java类感到困惑:

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

例如

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

这在逻辑上是好的设计吗? 它将对象放在逻辑层中。 如果类不是以这种方式嵌套的,则逻辑层会污染名称空间。 一个学生可以去别的地方。 为学生创建软件包会更好吗?

该结构应嵌套还是展平?

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

展平。 这看起来有点像您已经将实例封装的思想与名称空间混为一谈了。 School实例可能包含许多对Student的引用,但是没有理由将Student 类型归入School类型。

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

除了学生以外, 学生无所求 它不应该与衣服无关。

如果我们为他们创建一个程序包,那就更好了。

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

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

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

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

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

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

早期的StackOverflow问题以及Java Tutorial的“ 嵌套类”部分中,可以找到两种类型的嵌套类(静态和非静态,也称为内部 )的概述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM