我对何时制作Java类感到困惑:
例如
class School {
static class Grade {
static class Class {
static class Student {
}
}
}
}
这是一个逻辑上很好的设计吗?它将对象放在逻辑层中。如果类没有以这种方式嵌套,则逻辑层会污染命名空间。学生可能去其他地方。为学生创建一个包可以让它变得更好吗?
这个结构应该嵌套还是展平?
答案 0 :(得分:2)
在我看来:展平。因为学生不会永远留在同一个班级。
答案 1 :(得分:1)
拼合。这看起来有点像你已经将实例封装的概念与命名空间混为一谈。学校实例可能包含许多对学生的引用,但没有理由认为学生类型应该在学校类型范围内。
学生可能指其他地方的学生服装。
除了学生之外,学生不应该有任何意义。它不应该与衣服无关。
如果我们为他们创建一个包,它会好一点。
是的,包是用于组织类型的容器。除非嵌套类型:
,否则不应以这种方式使用类型本身与外部类型紧密结合,使其本身毫无意义。
一个共同的概念是以一种特定于外层的方式表现出来的。例如,Map.Entry
适合作为嵌套的静态类型(接口),因为'entry'是一般概念,这种特殊类型的条目仅在处理地图时才有意义。
仅在其外部类中使用,并且在其外部不可见(或至少在包外不可见)。
答案 2 :(得分:0)
当您想要从其他类“隐藏”代码时,或者想要将该代码与封闭类相关联时,嵌套静态类通常很好。
它们通常不用于您的示例中的多级封装,或者它们相当大(例如,超过100-200行),因为它们变得难以维护。在这种情况下,您应该更好地使用包。
可以在earlier StackOverflow question以及Nested Classes中找到两种嵌套类(静态和非静态,又名内部)的精彩概述} Java Tutorial
。