1

如果我有一个javaclass SpecificDialog并且在那个类里面我有一个public static class Builder用来构建a的对象那么里面SpecificDialog的原因是因为它在逻辑上属于那里,因为它只能用于构建SpecifcDialogs。这是主要原因吗?BuilderSpecificDialog

但是如果Builder在里面,那么SpecificDialogSpecificDialog可以访问private. Builder这可能是不可取的,因为我可能无意中Builder's从外部修改了一些这样的私有字段SpecificDialog

是否对此无能为力,如果没有,我是否应该理解这不是一个大问题?

4

2 回答 2

1

声明内部类的主要原因是在结构上分离和重组复杂代码,并提供方法来处理 Java 回调的缺点(例如,作为闭包的等价物,最终将在 Java 8 中可用)。

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

于 2012-11-01T10:31:55.533 回答
1

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

于 2012-11-01T10:32:06.240 回答