在 Java 中使用嵌套类有什么好处?在许多示例中,在我看来它只会增加设计的复杂性。与例如复合模式相比,是否有任何示例显示使用嵌套类的强大功能?
6 回答
为什么使用嵌套类?
使用嵌套类有几个令人信服的理由,其中包括:
- 这是一种对仅在一个地方使用的类进行逻辑分组的方法。
- 它增加了封装。
- 嵌套类可以产生更易读和可维护的代码。
(来自文档)
我认为我能想到的最好的情况是在某种集合类(树、链表、地图等)中实现节点。节点实现没有理由向公众公开,并且由于它仅由集合的内部使用,因此将节点类嵌套在集合类中是有意义的。
类似的东西..
public class MyTree {
private class TreeNode {
//implementation details...
}
//public api, where implementation references TreeNode
}
我会在一个案例中使用嵌套类,我主要需要在周围的类中使用这个类。这可能是事件监听器之类的用法。
或者在我需要实现特定接口作为 API 方法的参数并且只在这个特定的顶级类中创建这个结构的情况下。
这避免了创建更多的顶级类——弄乱你的代码库——这对任何其他类都没有用。
希望这可以帮助。:)
与例如复合模式相比,是否有任何示例显示使用嵌套类的强大功能?
几乎所有的 Iterator 实现以及 keySet() 和 values() 的实现都是嵌套的。实际名称并不重要,但他们需要访问外部类才能完成工作。
拥有这些顶级类不会是优雅的或封装的。
我可以想到很多使用嵌套类的例子
1- 扩展一个类,以便在这个实例中使用它,其行为与通常不同(覆盖一个方法或更多)
2-在一个步骤中实现事件侦听器并将其传递给任何方法的简写
3-实现一个过于具体而无法全局定义的类(或具有包可见性或私有或其他)。而你只是想把它隐藏到更大的类中
我确实同意,尽管内部类的使用会使代码复杂化,无论您如何努力使 for 格式化程序变得漂亮,但它有它的用途,所以根据我自己的经验法则,我只在确定时才使用内部类以上其中一项适用,并且它的大小将最小,以免破坏我的代码
并且对于那个mattar,保持所有代码最小化:)
当我们知道此类将主要仅由将要写入的类使用时,我们使用嵌套(内部)类。它使包装结构保持清洁。通过使用 IDE 可以降低复杂性,您可以在其中轻松找到未在包结构中列出的类。
根据要求提供真实示例,请查看ArrayList
jdk 的实现。
你可以在这里找到它:http:
//grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/ArrayList.java#ArrayList
您将在 Arraylist 类中找到(除其他外)迭代器类。我猜想,这种行为的原因(对于大多数可迭代集合子类)是集合与其迭代器之间的直接连接。你在课堂之外不需要它。
您可以在 jdk 内的更多地方找到嵌套类。