java - 什么时候使用嵌套的 Java 类才真正有用?

标签 java class nested

您能给我一个嵌套 Java 类有用的具体示例吗? 我正在研究它,我了解它的工作原理,但我无法想象真正需要使用它的真实情况。

非常感谢

马可

最佳答案

关于何时使用嵌套类的最简洁的总结是:当该类在逻辑上是外部类 API 的一部分时,或者当它封装特定于外部类的行为时

例如,Map.Entry:它是映射中的一个条目。它在逻辑上是 Map 的 API 的一部分,因此将它放在 Map 中是有意义的。

另一个常见的例子是 Builder classes : 你使用 Builder 来制作一个东西,所以把它放在那个东西里面是有意义的。

这些是您仅在使用外部类的上下文中才真正使用的类:有时您可能会单独使用 Map.Entry 作为某种配对类;有时您可能想单独使用 Builder,例如,作为将内容放入该构建器但实际上并不自行构建的方法的参数。这些情况可能很少与也使用外部类的代码相去甚远:您仍在使用外部类 API 的某些方面,因此它们在逻辑上仍然属于该 API。

您可以将此类放在顶层,与“主”类并排放置。您可能不想这样做的原因有几个:

  • 它使 namespace 困惑。如果你有 FooBarBaz 等类,有 FooBuilderBarBuilder, BazBuilder 在顶层只会让我们更难看到“有用的”顶层类。
    • Google's protocol buffers为每种消息类型生成一个 Builder 类。考虑到 Google 代码中使用的 Protocol Buffer 的数量,这种困惑太麻烦了。
  • 嵌套类可以访问外部类的私有(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/

相关文章:

java - 如何要求多个条件返回 true J​​ava

java - 为什么 Java 8 预热速度较慢

javascript - 具有从子类 JS 调用的方法的类作用域

java - Quartz 中的嵌套作业

java - 我的嵌套 for 循环有问题吗?对数组的值进行计数和递增

python嵌套函数内存泄漏?

java - 合并多个调用保留顺序

java - LWJGL 中的立方体贴图

c++ - 类中的指针

javascript - 使用 Javascript 单击更改 CSS 类?