¿Debe utilizarse Lombok en el proyecto?

Java, como lenguaje de programación muy popular, aunque tiene características de lenguaje muy ricas, programación totalmente orientada a objetos y programación altamente estandarizada, también tiene una deficiencia que es la más criticada por todos: prolijo, especialmente cuando lo has desarrollado. durante muchos años. Después de eso, sentirá claramente que, en comparación con los lenguajes dinámicos, antes de definir variables en Java, primero debe crear una clase y luego definir el tipo de variable. Cada clase necesita escribir una gran cantidad de get/set/ toString/hashCode/equals y otros métodos.

Especialmente cuando una clase de entidad tiene docenas de variables, después de escribir los métodos get y set, la longitud de una clase de entidad es de casi mil líneas.

Para evitar escribir estos métodos "prolijos", muchos programadores han estado buscando una herramienta que pueda liberarlos de este tipo de trabajo repetitivo, como: idea, herramienta de desarrollo de eclipse para generar rápidamente métodos get y set, y There is this Herramienta Lombok de la que vamos a hablar hoy.

1. Lombok

Lombok es una herramienta muy popular para código conciso. Usando su función de anotación, puede ahorrarnos directamente cientos de líneas de métodos get y set, y la operación es muy conveniente.

Si se trata de una herramienta de desarrollo de ideas, puede buscar directamente lombok en preferencias -> complementos y luego hacer clic para instalar.

A continuación, importe el paquete de dependencia de lombok en el proyecto del proyecto.

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

Finalmente, solo necesita agregar la anotación @Data a la clase de entidad correspondiente para completar la inyección del atributo de clase get/set.

import lombok.Data;

@Data
public class User {
    private String id;
    private String age;
    private String name;
    
    //可以不用显式写get、set方法
}

Usando la anotación @Data en la clase, los atributos en esta clase de entidad no necesitan escribir explícitamente los métodos get y set.

Después de compilar esta clase, abrimos el archivo User.class para ver cómo se ve el contenido del archivo compilado.

public class User {
    private String id;
    private String age;
    private String name;

    public User() {
    }

    public String getId() {
        return this.id;
    }

    public String getAge() {
        return this.age;
    }

    public String getName() {
        return this.name;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof User)) {
            return false;
        } else {
            User other = (User)o;
            if (!other.canEqual(this)) {
                return false;
            } else {
                label47: {
                    Object this$id = this.getId();
                    Object other$id = other.getId();
                    if (this$id == null) {
                        if (other$id == null) {
                            break label47;
                        }
                    } else if (this$id.equals(other$id)) {
                        break label47;
                    }

                    return false;
                }

                Object this$age = this.getAge();
                Object other$age = other.getAge();
                if (this$age == null) {
                    if (other$age != null) {
                        return false;
                    }
                } else if (!this$age.equals(other$age)) {
                    return false;
                }

                Object this$name = this.getName();
                Object other$name = other.getName();
                if (this$name == null) {
                    if (other$name != null) {
                        return false;
                    }
                } else if (!this$name.equals(other$name)) {
                    return false;
                }

                return true;
            }
        }
    }

    protected boolean canEqual(Object other) {
        return other instanceof User;
    }

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        Object $id = this.getId();
        int result = result * 59 + ($id == null ? 43 : $id.hashCode());
        Object $age = this.getAge();
        result = result * 59 + ($age == null ? 43 : $age.hashCode());
        Object $name = this.getName();
        result = result * 59 + ($name == null ? 43 : $name.hashCode());
        return result;
    }

    public String toString() {
        return "User(id=" + this.getId() + ", age=" + this.getAge() + ", name=" + this.getName() + ")";
    }
}

Está claro que después de usar la anotación @Data, la clase User agrega los métodos get, set, hashCode, equals y toString.

A través del ejemplo anterior, puede encontrar que el uso de la anotación @Data puede reducir en gran medida la cantidad de código y hacer que el código sea muy conciso, que es la razón principal por la que muchos desarrolladores están interesados ​​​​en usar Lombok.

¿Cómo funciona Lombok?

Dado que la versión oficial de Java no proporciona una herramienta de anotación de este tipo para generar métodos rápidamente, las herramientas como Lombok en realidad utilizan la tecnología de procesamiento de anotaciones de Java 6 y JSR 269 para implementar la inyección de métodos.

En pocas palabras, utiliza la API no pública de Java. Cuando javac compila el código, obtiene el objeto JavacAnnotationProcessor a través de una conversión de tipo fuerte y luego obtiene el árbol de sintaxis abstracta (AST) del método JavacAnnotationProcessor para forzar la modificación, inyectando método get, set, etc.

¡La mayor ventaja de usar Lombok es que puede ahorrar una gran cantidad de código repetitivo y hacer que el código sea más conciso! ¡Pero también hay muchas desventajas!

3. ¿Cuáles son las desventajas?

3.1 Obligar a los compañeros de equipo a instalar también Lombok

Cuando usa el complemento de la herramienta Lombok para desarrollar rápidamente un proyecto, si otros colegas quieren colaborar con usted para desarrollar el proyecto, entonces tiene que instalar el complemento Lombok; de lo contrario, la compilación del proyecto informará un error.

3.2 Depuración de código reducida

Se reducirá la depuración del código, ¿por qué dices eso?

Aunque Lombok nos ahorra la programación de los métodos get y set, si quiero saber qué método se utiliza para establecer un determinado atributo de la clase, si uso el método nativo, puedo conocer muy bien a la persona que llama. Pero si usa el complemento Lombok para generarlo, no tiene forma de saberlo en este momento. ¡Ni siquiera puedo depurar!

3.3 Si no entiendes las anotaciones de Lombok, pisarás el foso

Sabemos que usar @Data reescribirá los métodos hashCode() y equals() Si se trata de una clase de entidad única sin herencia, no tendrá ningún problema al usar @Data.

Pero si esta clase de entidad hereda la clase principal, @Data solo reescribirá los métodos hashCode() y equals() de la subclase, y no agregará los atributos de la clase principal, lo que hará que, por ejemplo, cuando esté usando HashMap Cuando se utiliza la clase de entidad actual como clave, se pueden obtener resultados inesperados.

En este caso, puede agregar esta anotación @EqualsAndHashCode(callSuper=true) a la clase, y los métodos hashCode() y equals() de la subclase agregarán las propiedades de la clase principal.

3.4 Destrucción del encapsulado

La encapsulación es una característica muy importante en la programación orientada a objetos de Java.

Por ejemplo, para la clase de entidad Usuario, tengo un nuevo atributo de etiqueta. Solo quiero exponer su método de obtención y no quiero exponer el método de configuración al exterior. Cuando no uso la anotación @Data , Puedo programar de manera flexible, pero uso la anotación @Data Después de eso, la etiqueta de atributo está completamente expuesta al mundo exterior.

public class User {

    private String id;

    private String age;

    private String name;

    private String tag = "学生";

    public String getTag() {
        return tag;
    }
    
}

3.5 Afectar la actualización de jdk

De hecho, los pozos anteriores no son pozos grandes. En mi opinión, el pozo más grande es en realidad el principio de funcionamiento de Lombok, que utiliza interfaces API con soporte no oficial para modificar clases a través de la implantación forzada del programa. , para realizar la inyección de get, set y otros metodos.

De acuerdo con la frecuencia actual de actualización de JDK, se lanzará una nueva versión cada seis meses, pero como herramienta de terceros, Lombok es mantenido por un equipo de código abierto, por lo que no se puede garantizar su velocidad de iteración.

Si un día JDK bloquea este tipo de puerta trasera, entonces Lombok básicamente será inutilizable y será algo problemático en ese momento.

Cuatro Resumen

Como complemento de herramienta muy popular, Lombok definitivamente tiene sus propias ventajas. Ya sea que se recomiende su uso en el desarrollo diario o no, personalmente tengo una actitud neutral. Si a todos en su equipo les gusta, les recomiendo que lo usen. , antes de usarlo, lo mejor es entrenar, cuáles son las trampas y evitar pisar trampas.

Si a la mayoría de la gente no le gusta usarlo, entonces no se recomienda que lo use. Muchas compañías prohíben que lo use. De hecho, este tipo de complemento es un poco similar a ese tipo de complemento no autorizado. en. El principio de funcionamiento no se implementa de una manera reconocida oficialmente. Si un día La nueva versión de jdk bloqueó repentinamente esta laguna, entonces es más difícil para el proyecto actualizar jdk.

Por lo tanto, cuando evalúe si introducir Lombok en el código, puede considerar sus ventajas mientras considera los problemas que traerá, ¡entonces se logrará el propósito de este artículo!

5. Referencia

1, proyecto lombok

2, geekbang - lombok

3, itpub - lombok

Supongo que te gusta

Origin blog.csdn.net/Chenhui98/article/details/126827278
Recomendado
Clasificación