Administrator
发布于 2024-09-05 / 3 阅读
0
0

静态内部类

静态内部类的样式

静态内部类,是指,在类A内部,再定义一个类B,如下:

image-20240905164445508


其实,我的理解是,外部类A 和 静态内部类B,他们结婚了,组成一个家庭。

在这个家庭中,他们能够放下戒备,信任彼此,所以,能直接访问对方的私有属性,不必走get/set方法了。

但是,他们还是一致对外,对外部的其他类的不信任,还是保持着,并没有降低戒备。

感觉,类A扮演的角色就是丈夫,静态内部类B扮演的角色,就是妻子。后面,如果想称呼类B,一般说张先生的太太,也就是说,加了前缀(张先生)

静态内部类使用的场景

场景1:作为builder设计模式

如果,我们想实现,类似fluent的效果:

FileLocationMoveFeignDTO locationMoveFeignDTO = FileLocationMoveFeignDTO.builder().withFileUrl("xxxx").withTargetDirPath("yyy").build();

此时,就需要使用到静态内部类,关键有3个地方:

  • 利用静态内部类的初始化,不需要先将外部类初始化的特性,提供如下代码:
public static FileLocationMoveFeignDTOBuilder builder() {
        return new FileLocationMoveFeignDTOBuilder();
}
  • 利用静态内部类的特性,外部类的构造方法中,可以直接访问静态内部类的私有属性值,不需要使用get方法获取
public FileLocationMoveFeignDTO(FileLocationMoveFeignDTOBuilder builder) {
        this.fileUrl = builder.fileUrl;
        this.targetDirPath = builder.targetDirPath;
}
  • 利用静态内部类的特性,在builder内部类中,直接初始化一个外部类实例
 public FileLocationMoveFeignDTO build() {
       return new FileLocationMoveFeignDTO(this);
}

场景2:作为application.yaml中配置项,绑定的properties类

如果一个配置项,比较复杂,分成很多层,存在嵌套的情况。

此时,子层对应绑定类,可以考虑采用静态内部类。

看一个示例:SpringDocConfigProperties.GroupConfig

image-20240905170147695

image-20240905170211421

这样,就能将同一个功能,涉及到的相关类,放到一起,做到高内聚的效果。


评论