El complemento lombok de Idea es compatible con @SuperBuilder y su uso

Acerca de @SuperBuilder

Primero entienda @Builder

Si leyó este artículo, debe haber utilizado esta anotación. Aquí hay una breve declaración sobre el uso básico. Si ya lo conoce, puede omitir esta parte.

Introducir dependencias (estructura Maven)

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

Crear una clase

/**
 * @author lingxi
 * @date 2021/2/2 19:09
 */
@SuperBuilder(toBuilder = true) //toBuilder属性默认关闭,如果开启,则所有的父类应该也要开启
@Getter
public class Child extends Parent{
    
    
    
}

@SuperBuilder(toBuilder = true)
@Getter
public class Parent {
    
    

    private Integer age;
    private String name;
}

Usando la anotación @Builder aquí, puede escribir así al crear una nueva instancia:

    /**
     * @SuperBuilder 测试
     */
    @Test
    public void superBuilderTest() {
    
    

        // 子类继承父类,需要父类和子类都要添加注解@SuperBuilder
        Child aaa = Child.builder().age(12).name("aaa").build();
        System.out.println(aaa.getName());
        // toBuilder属性默认关闭,如果开启,则所有的父类应该也要开启
        // 这是一个类似深拷贝的一个方法,不会改变原有实例的属性,生成一个新的实例
        Child nbbb = aaa.toBuilder().name("nbbb").build();
        System.out.println(nbbb.getName());


    }

Como puede ver, solo necesitamos escribir una anotación @Builder, que tiene los siguientes beneficios:

Una anotación reemplaza al constructor en el caso de varios parámetros, lo que reduce la cantidad de código para construir la clase.
La forma de construir a través de Builder, es decir, la forma de nombre de atributo (valor), es más legible que la forma de directamente usando el constructor, y es más legible que frecuente La forma de usar el método set es más concisa.
2.2. Comprender @SuperBuilder
2.2.1. ¿Qué tipo de problema resuelve @SuperBuilder?
En lo anterior (2.1), entendemos el uso de @Builder, luego colocamos el atributo de miembro de la clase Ming en el ejemplo en la clase principal:

public class Person {
    
    
    private Integer age;
    private String name;
}

@Builder
public class Ming extends Person{
    
    
}

En este momento, nuestras llamadas anteriores a .builder informarán errores. Esto se debe a que @Builder no admite la construcción de propiedades de miembros de clase principal. La apariencia de la anotación @SuperBuilder se utiliza para resolver este problema.

@SuperBuilder
public class Person {
    
    
    private Integer age;
    private String name;
}

@SuperBuilder
public class Ming extends Person{
    
    
}

De esta forma, la subclase normalmente puede obtener los atributos de miembro de la clase padre para la construcción del constructor.

@SuperBuilder (toBuilder = true) Uso La
propiedad toBuilder está desactivada de forma predeterminada. Si está activada, todas las clases principales también deberían estar activadas. El efecto es el siguiente:

Ming mingD = Ming.builder()
      .age(11)
      .name("小明")
      .build();
Ming mingF = mingD.toBuilder().name("猪").build();
System.err.println(mingD.toString());
System.err.println(mingF.toString());

Al establecer verdadero, todas las instancias de clase tendrán el método toBuilder, que es un método similar a la copia profunda, que no cambiará las propiedades de la instancia original y generará una nueva instancia. Los atributos con valores asignados en toBuilder se cambiarán a atributos asignados, y aquellos sin asignaciones estarán sujetos al valor en la instancia de llamada.

2.2.3. @SuperBuilder (buildMethodName = "execute", builderMethodName = "helloWorld", toBuilder = true) Uso
Este uso en realidad no tiene sentido, es para personalizar el nombre del método, así que no lo expandiré.

2.2.4. @ Builder.ObtainVia (XXX) Uso
Esta es la anotación de Filed o parámetro, veamos el código fuente

@Target({
    
    FIELD, PARAMETER})
@Retention(SOURCE)
public @interface ObtainVia {
    
    
		/**
		 * @return Tells lombok to obtain a value with the expression {@code this.value}.
		 */
		String field() default "";
		
		/**
		 * @return Tells lombok to obtain a value with the expression {@code this.method()}.
		 */
		String method() default "";
		
		/**
		 * @return Tells lombok to obtain a value with the expression {@code 			   SelfType.method(this)}; requires {@code method} to be set.
		 */
		boolean isStatic() default false;
}

entre ellos,

El campo le dice a lombok qué atributo usar al asignar un valor. El
método le dice a lombok qué método llamar al asignar.
IsStatic sigue al método. El valor predeterminado es falso, lo que indica si el método correspondiente es estático.
Tenga en cuenta que estos métodos solo están disponibles en ToBuilder. = verdadero cuando es válido, es mejor no mezclarlo (hay un problema de orden)

2.2.5. Preste atención a la
actualización del método de construcción complementario 2019-10-10

Cuando se utilizan anotaciones @Builder o @SuperBuilder, los constructores de parámetros nulos no se crearán de forma predeterminada. Si necesita constructores de parámetros nulos o constructores de parámetros completos adicionales, debe agregar las siguientes anotaciones tanto a la subclase como a la clase principal:

@AllArgsConstructor //全参构造函数
@NoArgsConstructor //空参构造函数
  1. Referencias
    @ sitio web oficial de SuperBuilder-lombok

Supongo que te gusta

Origin blog.csdn.net/qq_40093255/article/details/111028490
Recomendado
Clasificación