在java中使用嵌套类的好处

时间:2013-01-08 16:04:48

标签: java software-design

在Java中使用嵌套类有什么好处?在许多示例中,在我看来它只会增加设计的复杂性。是否有任何示例显示使用嵌套类与复合模式进行比较的能力?

6 个答案:

答案 0 :(得分:9)

为什么要使用嵌套类?

使用嵌套类有几个令人信服的理由,其中包括:

  • 这是一种逻辑分组仅在一个地方使用的类的方法。
  • 它增加了封装。
  • 嵌套类可以使代码更具可读性和可维护性。

(来自the docs

我认为我能想到的最好的情况,在我的脑海中将是某种集合类(树,链表,地图等)中节点的实现。没有理由将节点实现暴露给公众,并且由于它仅由集合的内部使用,因此将节点类嵌套在集合类中是有意义的。

有些事情......

public class MyTree {
  private class TreeNode {
    //implementation details...
  }

  //public api, where implementation references TreeNode
}

答案 1 :(得分:4)

我会在一个案例中使用嵌套类,其中我主要需要在周围的类中使用这个类。这可能是事件监听器之类的用法。

或者,当我需要将特定接口作为API方法的参数来实现,并且仅在此特定顶级类中创建此结构时。

这可以避免创建更多顶级类 - 弄乱你的代码库 - 对任何其他类都没用。

希望这会有所帮助。 :)

答案 2 :(得分:2)

  

是否有任何示例显示使用嵌套类与复合模式进行比较的能力?

几乎所有Iterator实现以及keySet()和values()的实现都是嵌套的。实际名称并不重要,但他们需要访问外部类来完成他们的工作。

将这些作为顶级课程并不优雅或封装。

答案 3 :(得分:2)

我可以想到使用嵌套类

的很多例子

1-为了在此实例中使用它而扩展一个类,其行为与通常不同(覆盖一个或多个方法)

2-用于在一个步骤中实现并将事件侦听器传递给任何方法的简短手段

3-实现一个太具体而无法全局定义的类(或包可见性或私有或任何内容)。而你只是想将它隐藏在更大的类

我同意尽管内部类的使用会使代码复杂化,无论你如何努力使格式化程序美观但它有其用途,所以我自己的经验法则我只使用内部类我我确定上面的一个适用,并且它的大小将是最小的,以免破坏我的代码

并且对于那个mattar保持所有代码最小:)

答案 4 :(得分:0)

当我们知道这个类主要仅由它将被写入的类使用时,我们使用嵌套(内部)类。它使包装结构更清洁。通过使用IDE可以轻松找到未在包结构中列出的类,从而减少了复杂性。

答案 5 :(得分:0)

根据请求的真实示例,请查看jdk的ArrayList实现。
你可以在这里找到它: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/ArrayList.java#ArrayList

你会发现(除其他外)Arraylist类中的迭代器类。我猜,这种行为的原因(对于大多数可迭代集合子类)是集合与其迭代器之间的直接连接。你不需要在课外。

您可以在jdk中的更多位置找到嵌套类。