如果我有一个java class SpecificDialog
并且在该类中,我有public static class Builder
用于构建SpecificDialog
的对象,那么Builder
所在的原因{ {1}}因为它在逻辑上属于那里,因为它只能用于构建SpecificcDialogs。这是主要原因吗?
但是如果SpecificDialog
位于Builder
内,那么我的SpecificDialog
可以访问SpecificDialog
的每个private
字段/成员。这可能是不受欢迎的,因为我可能会无意中从外部Builder
修改某些此类私有Builder's
字段。
有没有什么可以做的,如果没有,我能理解这不是一个大问题吗?
答案 0 :(得分:1)
main reason for declaring inner classes是在结构上分离和重新组织复杂的代码,并提供处理Java的回调缺点的方法(例如,相当于闭包,最终将在Java 8中提供)。
因为内在类本身就是外部类的结构部分,所以对所有成员的完全访问不仅可以,而且是可取的 - 这实际上是使它成为一个有用的工具!没有这个特性,内部类的行为与任何类的行为完全相同 - 因此没有任何优势。
答案 1 :(得分:1)
无论您选择何种设计,您总能无意中做一些不应该做的事情。使构建器成为它构建的类的静态内部类是一个常用的习惯用法,因为外部类可以访问构建器的私有字段。将构建器视为外部类的组成部分,就像私有字段或方法一样,并确保类及其构建器的行为符合它们的要求。