[Java] 生产业务上,何时使用内部类?

25 阅读1分钟

当需要在某个 POJO 类内新增一个封装类类型字段时,通常可以可以采用静态内部类的形式。这样做有什么好处?

一、采用内部类(而不在外部新声明一个类)的好处

  1. 逻辑上内聚,一看就明白这个内部类隶属于外部类。
  2. 命名空间管理,内部类可以取很通用的名字,而不必担心做新需求时会发生重名冲突。
  3. 代码阅读容易,结构更加简单清晰、减少了文件数量。

二、使用静态内部类(而不是成员内部类)的好处

  1. (最常见)在JSON序列化/反序列化框架(如FastJSON、Jackson)中,静态内部类的处理更加简单和可靠,不需要考虑外部类实例的问题。
  2. 静态内部类不同,除了静态变量和方法,成员内部类还可以直接访问外部类的实例变量和方法。一个 POJO 类的内部类字段只需要保存值,不需要访问外部的实例成员,使用静态内部类可以避免不必要的内存开销。
  3. 静态内部类可以直接通过 new Outer.Inner() 创建实例,而成员内部类需要先有外部类实例才能创建: outer.new Inner() 。这在很多场景下(如JSON反序列化、Builder模式等)更加方便。
  4. 静态内部类天然线程安全(就创建而言),因为它不依赖外部类的实例状态,避免了多线程环境下可能出现的问题。