Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
如 Nested Classes 一节所述,嵌套类使你能够对仅在一个地方使用的类进行逻辑分组,增加封装的使用,并创建更易读和可维护的代码。局部类,匿名类和 lambda 表达式也具有这些优点;但是,它们旨在用于更具体的情况:
局部类:如果你需要创建多个类的实例,访问其构造函数或引入新的命名类型(例如,因为你需要稍后调用其他方法),请使用它。
匿名类:如果需要声明字段或其他方法,请使用它。
如果要封装要传递给其他代码的单个行为单元,请使用它。例如,如果要在集合的每个元素上,在进程完成时,或者在进程遇到错误时执行某个操作,你将使用 lambda 表达式。
如果你需要函数式接口的简单实例并且不应用前述条件(例如,你不需要构造函数,命名类型,字段或其他方法),请使用它。
嵌套类:如果你的要求与局部类的要求类似,你希望更广泛地使用该类型,并且不需要访问局部变量或方法参数,则使用它。
如果需要访问封闭实例的非公共字段和方法,请使用非静态嵌套类(或内部类)。如果不需要此访问权限,请使用静态嵌套类。