搜索
首页Javajava教程Java 中的 Lombok 项目

Proyecto Lombok en Java

介绍

Lombok 是一个充当 Java 注释处理器的库,旨在消除代码中的冗余。它的主要功能是自动生成重复代码或“样板文件”——这些元素虽然必要,但不会为我们的程序逻辑添加直接价值。主要用于在编译时自动生成 getter 和 setter 方法、构造函数、equals()、hashCode()、toString() 方法以及 Java 类中的其他常见元素。

无需为这些基本功能手动编写数十行代码,Lombok 允许您使用简单的注释来定义它们,从而产生更干净、更易于维护且不易出错的代码。

设施

要在Java项目中使用Lombok,除了安装之外,还需要在pom.xml文件(如果是Maven项目)或build.gradle(如果是Gradle项目)中添加相应的依赖我们正在使用的IDE中的相应插件。在这篇文章中,我们将使用 Maven 和 IntelliJ IDEA 作为示例。

<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

如有任何疑问,您可以随时查看Lombok的官方文档:

  • Lombok 与 Maven
  • IntelliJ IDEA 中的 Lombok

@数据

当我们创建一个类时,我们会定期执行以下操作,无论是手动还是使用 IDE 提供的快捷方式:

  • 封装属性并生成其getter和setter方法
  • 生成一个空的构造函数和另一个接收所有属性的
  • 实现 equals()、hashCode() 和 toString() 方法

嗯,Lombok 有 @Data 注释,它允许我们在一行中完成所有这些操作,生成与 POJO(普通旧 Java 对象) 相关的所有内容。这个注解是 @Getter、@Setter、@EqualsAndHashCode、@NoArgsConstructor 和 @AllArgsConstructor 注解的组合,我们稍后会看到。

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}
public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

@NoArgsConstructor、@AllArgsConstructor 和 @RequiredArgsConstructor

这些注释允许我们自动生成具有不同参数组合的构造函数,考虑到属性是根据它们在类中声明的顺序使用的。

  • @NoArgsConstructor:生成一个无参构造函数(空),如果无法生成,则会抛出异常,为了避免这种情况,只需使用如下注解 @NoArgsConstructor(force = true)。
  • @AllArgsConstructor:生成一个构造函数,以类的所有属性作为参数。
  • @RequiredArgsConstructor:为所有最终字段生成构造函数和/或用 @NonNull 注释进行标记。
<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

@Getter 和 @setter

这些注解可以让我们自动为类的所有属性生成 getter 和 setter 方法,或者只为那些标有相应注解的属性生成 getter 和 setter 方法,即可以在类或属性级别使用。

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}
public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

@ToString

该注解自动生成 toString() 方法,该方法返回类及其属性的字符串表示形式,格式如下:ClassName(attribute1=value1, attribute2=value2, ...)。默认情况下,类的所有非静态属性都包含在结果中,但可以使用 @ToString.Exclude 属性排除特定属性。如果您只想显示属性的值而不是声明的名称,可以使用 @ToString(includeFieldNames = false)。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Persona {
    private String nombre;
}

@EqualsAndHashCode

允许您从类的所有属性生成 equals() 和 hashCode() 方法,如果您想排除或包含某个属性,可以使用注释 @EqualsAndHashCode.Exclude 和 @EqualsAndHashCode.Include 来实现。分别。

import lombok.*;

@Getter
@Setter
public class Persona {
    private String nombre;
    private String apellido;
}

@价值

以前,在 Java 中创建不可变类需要执行一系列步骤,例如使类和/或属性成为最终类型,并且不会生成 setter 方法。 Lombok 使我们可以轻松地使用 @Value 注解创建不可变类,该注解结合了 @Getter、@ToString、@EqualsAndHashCode 和 @AllArgsConstructor 注解来生成不可变类。所有属性都标记为 private Final,并且不会生成 setter 方法。它是 @Data 的不可变变体。

import lombok.*;

public class Persona {
    @Getter @Setter
    private String nombre;
    private String apellido;
}

在 Java 的最新版本中,与使用记录相比,此注释失去了意义,因为它们具有相同的目的,并且使用记录更实用。如果您有兴趣了解更多有关此主题的信息,博客上还有更多有关记录的帖子。

<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

@val

这个注解允许我们将一个变量声明为final并自动推断它的数据类型,也就是说,不需要指定变量的数据类型,Lombok会负责推断它。如果变量数据类型很长或很复杂,它很有用,这样可以避免重复。

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}

如果我们直接使用final var或者简单的var进行类型推断,这个注解可能会失去意义,因为这是语言的特性,这样更方便。如果您有兴趣了解更多,可以参考以下帖子

public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

@var

它的工作方式与@val完全相同,但它不将变量声明为final,它只是推断其类型。有必要考虑类型推断的概念,因为您不能声明 String 类型的内容,并且想要为其分配 int 类型的值也不是最终的。同样,在最新版本的 Java 中,该注释被 var 取代。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Persona {
    private String nombre;
}

@非空

这个注解可以用在类的属性和方法的参数上,它基本上表明属性的值不能为空,如果尝试将空值分配给标记为@NonNull的属性,它会抛出 NullPointerException,即使用 if (param == null) throw new NullPointerException("param is tagged non-null but is null"); 。无论它生成什么异常,它的使用在 IDE 本身中都更加明显,因为它会以某种方式向我们表明该值不能为空。

import lombok.*;

@Getter
@Setter
public class Persona {
    private String nombre;
    private String apellido;
}

@清理

此注释允许我们确保任何使用它的资源(如果它具有 close() 方法或实现 AutoCloseable 或 Closeable 接口)都会在其所在代码块的末尾自动关闭。它在处理需要释放的资源时非常有用,例如文件、数据库连接等。

import lombok.*;

public class Persona {
    @Getter @Setter
    private String nombre;
    private String apellido;
}

如果我们使用资源尝试,可以手动获得此结果。

import lombok.*;

@AllArgsConstructor
@ToString
public class Persona {
    private String nombre;
    @ToString.Exclude
    private String apellido;
}

// Output: Persona(nombre=Maria)

@builder

这个注解可以让我们自动生成一个设计模式Builder,即一个可以让我们一步步构建复杂对象的对象,这样就可以配置一个对象的不同属性,而无需调用带有多个参数的构造函数。如果一个类有很多属性并且我们不希望有一个带有很多参数的构造函数,那么它很有用。

<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

@和

这个注解允许我们创建一个方法,该方法返回带有修改属性的当前对象的副本,即它生成一个方法 withAttributeName(Object object) ,该方法允许我们用该对象创建当前对象的副本属性由我们作为参数传递的值修改。当我们想要修改对象的属性而不修改原始对象时,它非常有用。

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}
public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

到目前为止,我们已经看到了一些最常用的注释,每个注释可能接受也可能不接受额外的配置,同样还有其他注释被标记为实验性的,无论如何,参考很重要官方文档,以充分利用 Lombok 为我们提供的所有功能以及重复代码生成方面的优势。

以上是Java 中的 Lombok 项目的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JVM如何促进Java的'写作一次,在任何地方运行”(WORA)功能?JVM如何促进Java的'写作一次,在任何地方运行”(WORA)功能?May 02, 2025 am 12:25 AM

JVM通过字节码解释、平台无关的API和动态类加载实现Java的WORA特性:1.字节码被解释为机器码,确保跨平台运行;2.标准API抽象操作系统差异;3.类在运行时动态加载,保证一致性。

Java的较新版本如何解决平台特定问题?Java的较新版本如何解决平台特定问题?May 02, 2025 am 12:18 AM

Java的最新版本通过JVM优化、标准库改进和第三方库支持有效解决平台特定问题。1)JVM优化,如Java11的ZGC提升了垃圾回收性能。2)标准库改进,如Java9的模块系统减少平台相关问题。3)第三方库提供平台优化版本,如OpenCV。

说明JVM执行的字节码验证的过程。说明JVM执行的字节码验证的过程。May 02, 2025 am 12:18 AM

JVM的字节码验证过程包括四个关键步骤:1)检查类文件格式是否符合规范,2)验证字节码指令的有效性和正确性,3)进行数据流分析确保类型安全,4)平衡验证的彻底性与性能。通过这些步骤,JVM确保只有安全、正确的字节码被执行,从而保护程序的完整性和安全性。

平台独立性如何简化Java应用程序的部署?平台独立性如何简化Java应用程序的部署?May 02, 2025 am 12:15 AM

Java'splatFormIndepentEncealLowsApplicationStorunonAnyOperatingsystemwithajvm.1)singleCodeBase:writeandeandcompileonceforallplatforms.2)easileupdates:updatebybytecodeforsimultaneDeployment.3)testOnOneOnePlatForforuluniverSalpeforuluniverSaliver.4444.4444

Java的平台独立性如何随着时间的流逝而发展?Java的平台独立性如何随着时间的流逝而发展?May 02, 2025 am 12:12 AM

Java的平台独立性通过JVM、JIT编译、标准化、泛型、lambda表达式和ProjectPanama等技术不断增强。自1990年代以来,Java从基本的JVM演进到高性能的现代JVM,确保了代码在不同平台的一致性和高效性。

在Java应用程序中缓解平台特定问题的策略是什么?在Java应用程序中缓解平台特定问题的策略是什么?May 01, 2025 am 12:20 AM

Java如何缓解平台特定的问题?Java通过JVM和标准库来实现平台无关性。1)使用字节码和JVM抽象操作系统差异;2)标准库提供跨平台API,如Paths类处理文件路径,Charset类处理字符编码;3)实际项目中使用配置文件和多平台测试来优化和调试。

Java的平台独立性与微服务体系结构之间有什么关系?Java的平台独立性与微服务体系结构之间有什么关系?May 01, 2025 am 12:16 AM

java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸缩性和便携性。1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

GRAALVM与Java的平台独立目标有何关系?GRAALVM与Java的平台独立目标有何关系?May 01, 2025 am 12:14 AM

GraalVM通过三种方式增强了Java的平台独立性:1.跨语言互操作,允许Java与其他语言无缝互操作;2.独立的运行时环境,通过GraalVMNativeImage将Java程序编译成本地可执行文件;3.性能优化,Graal编译器生成高效的机器码,提升Java程序的性能和一致性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),