Java内部类设计的好处

时间:2013-04-18 13:50:33

标签: java inner-classes

在java中,你可以拥有内部类。如果对此有任何好处,我会从设计角度感到好奇。

我最初的想法是,将一个单独的文件与类分开可以更清晰地将事物分成可重用的模块。通过这样做,如果其他类希望使用其他类,他们也可以创建自己的实例。对我而言,似乎避免使用内部类可能是一个更好的可扩展性和代码重用设计,并且在处理新项目时,通常很难判断该类是否会被重用...所以我觉得有必要单独的课程是要走的路。

我问这个问题是因为我接手了一个项目,其中有很多......这让我觉得以前的开发人员可能只是懒惰或不熟悉IDE。但我想确保我不会错过这些内部类的任何好处。如果有好处可以有人让我知道,然后我可以确认以前的开发人员是否正在利用这些好处。

5 个答案:

答案 0 :(得分:16)

当内部类不在包含类之外使用时它们是好的 - 它是一种减少类膨胀的方法。作为一般规则,这是我使用它们的唯一时间。

非静态内部类也可以访问包含实例的私有字段。

答案 1 :(得分:3)

内部类对以下内容很有用:

  1. 隐藏实施细节。

  2. 使项目视图更简洁,更容易理解。

  3. 添加相关代码的逻辑分组。

答案 2 :(得分:2)

我想到的内部类的一个很好的用法是java.util.ArrayList,它将迭代器实现隐藏到private inner classes中。除非在列表对象上调用iterator()listIterator(),否则无法创建它们。

这样,Iterator的{​​{1}}和ListIterator实现与其相关的类和方法分组,以提高可读性(实现非常简短),但隐藏在其他人之外。

他们无法声明ArrayList,因为他们需要访问其封闭的实例对象。

static

答案 3 :(得分:2)

非静态内部阶级:
1)内部类将用于在外部类上执行某些任务并返回输出
。因此,它将确保创建外部类对象以访问它 2)内部类只针对外部类,对外界没有用。所以不需要考虑代码重用。

例如_1)内部类的最佳示例是iterator实现集合框架。 Set(AbstractCollection.java)和List(AbstractList.java)将使用不同的迭代器内部类实现。
   - >我们可以重用内部类代码。例如,Arraylist和Vector都使用private class Itr java.util.AbstractList 内部类的实现。

静态内部阶级:
1)静态内部类不依赖于外部类对象;但它特定于外层阶级。它不会暴露给独立,因为它只针对外部类。所以没有代码重用。
2)它有一组对所有对象共同(共享)的方法(类级别) 3)

例如1)使用静态内部类的Sigleton对象回溯。
例如2)构建器模式
例如,一个类的比较器实现。

答案 4 :(得分:0)

内部类非常重要,它可以帮助您实现非常整洁的封装需求,您的基类也可以从许多类继承(例如实现抽象处理程序)。每个程序员都可以学习如何在Java中使用内部类,这是非常有用的。