• 何时使用内部类/嵌套类


    定义

    Java内部类都是解决只使用一次的类型,不过能力各有不同,侧重场景也不同
    Java关于内部类的名称实在太乱,不得不先中英文对照一下,中文只是我比较习惯,不表示什么。

    • Nested Class, *嵌套类*. 所有在类(包括方法)内部定义的类都可以叫这个名字.
    • Static Nested Class, 静态嵌套类. 或者直接说嵌套类.
    • Inner Class/Non-static Nested Class, 内部类. 这两个英文是不同的叫法.
    • Local Class, 局部类. 在方法内定义的嵌套类,
    • Anonymous Class, 匿名类. 在方法内定义, 但没有名字的类.
    • Lambda Expression, Lambda表达式. 可以认为只用一个方法的匿名类.[Java 8]
    • Method Reference, 方法引用. 可以认为是只支持转调对应函数的Lambda表达式.[Java 8]

    常见的情况

    嵌套类一次只会有一个实例,基本不需要类型名。
    首先, 最弱的需求。只需要一个非常简单的回调,与定义的位置关联很小。

    • 对于只需要一个函数调用的场景, 可以选择方法引用,Lambda表达式,和实现特定接口的匿名类.
    • *方法引用*的能力最弱, 所有应优先考虑, 当直接调用某个类的方法就可以解决问题时, 就应该使用它.

    其次, 除了直接函数调用外, 如果需要引用局部(或成员)变量,修改调用参数等,可以使用Lambda表达式.
    最后, 除了上述要求外, 当需要声明成员变量或多于一个函数时,只能使用匿名类.

    很少见的情况

    除了上述要求外, 需要多个实例或者需要类型名时, 才需要使用局部类.

    如果, 除了上述要求外, 需要外部能访问到这个类型名时, 即它会做为接口的一部分. 或者需要在多个方法中使用, 可以使用嵌套类.
    不过, 必须放弃访问方法内的局部变量以及实例成员变量.

    最后, 最强大的内部类,可以访问除了方法内局部变量外的所有成员, 同时也可以被外部直接使用.

    参考

    http://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html

  • 相关阅读:
    网络初级篇之STP(BPDU详解与STP故障恢复)
    网络初级篇之STP(实验验证)
    3-1 查看帮助,命令历史与快捷键
    2-1 bash基本特性
    2-0 虚拟机与Linux系统安装
    0.操作系统的获取与安装
    1.计算机基础
    Linux下打包、压缩和解压
    JAVA基本数据类型转换的注意事项
    EditPlus代码自动完成的设置
  • 原文地址:https://www.cnblogs.com/ahuangliang/p/usage-of-nested-class-in-java.html
Copyright © 2020-2023  润新知