[英]Java static nested class vs top level class
我对何时创建Java类感到困惑:
例如
class School {
static class Grade {
static class Class {
static class Student {
}
}
}
}
这在逻辑上是好的设计吗? 它将对象放在逻辑层中。 如果类不是以这种方式嵌套的,则逻辑层会污染名称空间。 一个学生可以去别的地方。 为学生创建软件包会更好吗?
该结构应嵌套还是展平?
我认为:展平。 因为学生不会永远留在同一个班级。
展平。 这看起来有点像您已经将实例封装的思想与名称空间混为一谈了。 School实例可能包含许多对Student的引用,但是没有理由将Student 类型归入School类型。
学生可能意味着学生在其他地方穿衣服。
除了学生以外, 学生别无所求 。 它不应该与衣服无关。
如果我们为他们创建一个程序包,那就更好了。
是的,包是用于组织类型的容器。 除非嵌套类型,否则不应以这种方式使用类型本身:
与外部类型紧密耦合,以至于它本身就毫无意义。
是一种常见概念,以特定于外部类的方式体现出来。 例如, Map.Entry
适合作为嵌套的静态类型(接口),因为“ entry”是一个通用概念,并且这种特定类型的条目仅在处理地图时才相关。
仅在其外部类中使用,并且在其外部不可见(或至少在包装外部不可见)。
当您想从其他类中“隐藏”它们的代码,或者想将该代码与封闭类相关联时,嵌套的静态类通常很好。
在您的示例中或当它们相当大时(例如,超过100-200行),它们通常不用于多层封装,因为它们变得难以维护。 在这种情况下,您最好使用软件包。
在早期的StackOverflow问题以及Java Tutorial
的“ 嵌套类”部分中,可以找到两种类型的嵌套类(静态和非静态,也称为内部 )的概述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.