您能给我一个嵌套 Java 类有用的具体示例吗? 我正在研究它,我了解它的工作原理,但我无法想象真正需要使用它的真实情况。
非常感谢
马可
最佳答案
关于何时使用嵌套类的最简洁的总结是:当该类在逻辑上是外部类 API 的一部分时,或者当它封装特定于外部类的行为时。
例如,Map.Entry
:它是映射中的一个条目。它在逻辑上是 Map
的 API 的一部分,因此将它放在 Map
中是有意义的。
另一个常见的例子是 Builder classes : 你使用 Builder
来制作一个东西,所以把它放在那个东西里面是有意义的。
这些是您仅在使用外部类的上下文中才真正使用的类:有时您可能会单独使用 Map.Entry
作为某种配对类;有时您可能想单独使用 Builder
,例如,作为将内容放入该构建器但实际上并不自行构建的方法的参数。这些情况可能很少与也使用外部类的代码相去甚远:您仍在使用外部类 API 的某些方面,因此它们在逻辑上仍然属于该 API。
您可以将此类放在顶层,与“主”类并排放置。您可能不想这样做的原因有几个:
- 它使 namespace 困惑。如果你有
Foo
、Bar
、Baz
等类,有FooBuilder
、BarBuilder
,BazBuilder
在顶层只会让我们更难看到“有用的”顶层类。- Google's protocol buffers为每种消息类型生成一个
Builder
类。考虑到 Google 代码中使用的 Protocol Buffer 的数量,这种困惑太麻烦了。
- Google's protocol buffers为每种消息类型生成一个
- 嵌套类可以访问外部类的私有(private)字段,这可以帮助您做某些事情而不必暴露这些字段。
- 您可以通过限定外部名称来引用嵌套类,例如
Outer.Builder
,而不必显式地import some.pkg.OuterBuilder
以及import some.pkg.Outer
。不可否认,我并不真正关心导入的数量,因为我只是让它们在 intellij 中折叠。
您还可以使用它们来封装类中的内部逻辑或中间状态:例如,当我发现自己在类中的私有(private)方法之间传递相同的 N 个参数时,我喜欢定义私有(private)嵌套类。这是您不希望类(class)以外的人关心的事情;它只是在类里面方便。
关于java - 什么时候使用嵌套的 Java 类才真正有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55116163/