麻烦静态私有类在java中

时间:2012-11-01 10:19:20

标签: java oop encapsulation

如果我有一个java class SpecificDialog并且在该类中,我有public static class Builder用于构建SpecificDialog的对象,那么Builder所在的原因{ {1}}因为它在逻辑上属于那里,因为它只能用于构建SpecificcDialogs。这是主要原因吗?

但是如果SpecificDialog位于Builder内,那么我的SpecificDialog可以访问SpecificDialog的每个private字段/成员。这可能是不受欢迎的,因为我可能会无意中从外部Builder修改某些此类私有Builder's字段。

有没有什么可以做的,如果没有,我能理解这不是一个大问题吗?

2 个答案:

答案 0 :(得分:1)

main reason for declaring inner classes是在结构上分离和重新组织复杂的代码,并提供处理Java的回调缺点的方法(例如,相当于闭包,最终将在Java 8中提供)。

因为内在类本身就是外部类的结构部分,所以对所有成员的完全访问不仅可以,而且是可取的 - 这实际上是使它成为一个有用的工具!没有这个特性,内部类的行为与任何类的行为完全相同 - 因此没有任何优势。

答案 1 :(得分:1)

无论您选择何种设计,您总能无意中做一些不应该做的事情。使构建器成为它构建的类的静态内部类是一个常用的习惯用法,因为外部类可以访问构建器的私有字段。将构建器视为外部类的组成部分,就像私有字段或方法一样,并确保类及其构建器的行为符合它们的要求。