使用 Lombok 简化项目中无谓的Java代码

在写使用Java时,难免会有一些模板代码要写,不然get/set,toString, hashCode, close 资源,定义构造函数等等。代码会显得很冗余,很长。Lombok项目可以是我们摆脱这些东西,通过一系列的注解,Lombok可以帮我们自动生成这些函数。

Lombok 官网地址:https://projectlombok.org/

参考文档:https://projectlombok.org/features/index.html

1. 安装

到官网下载 lombok.jar,直接双击,按照提示进行操作,就可以在eclipse中安装成功。

如果使用maven时,则需要引入依赖:

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

如果需要用javac或者其他命令工具编译java类,则需要将 lombok.jar放入classpath.

2. 使用方法 (文档:https://projectlombok.org/features/index.html)

1> @Getter/@Setter, 注解在一个pojo类上,会在编译时,帮我们自动生成get/set函数。

2> @ToString 注解在类上,编译时,帮我们生成包括所有field的toString函数;

3> @EqualsAndHashCode,  编译时,帮我们生成equlas 和hashCode函数;

4> @Cleanup, 注解在一些资源对象的定义上,可以帮我们自动调用它们的close()函数;这个很有帮助;

5> @NoArgsContructor,@RequireArgsContructor, @AllArgsContructor,分别帮我们生成无参数构造函数,每一个非Null的field的构造函数,所有field参数的构造函数;

6> @Data,All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor! (等价于:@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor)

更多的注解,参见https://projectlombok.org/features/index.html

3. 例子

public class Test {
    private int id;
    private String name;
    private String password;

    public static void main(String[] args) {
        Test test = new Test(1, "test", "password");
        System.out.println(test);
        System.out.println(test.getName());
    }
}

结果:

Test(id=1, name=test, password=password)
test

自动 生成了 Test 的全field参数的构造函数,自动生成了 toString(), get/set函数等等。再看一例:

    public static void main(String[] args) throws IOException{
        @Cleanup
        InputStream in = new FileInputStream("/home/a.txt");
        @Cleanup
        OutputStream out = new FileOutputStream("/home/b.txt");
        byte[] b = new byte[10000];
        while (true) {
            int r = in.read(b);
            if (r == -1)
                break;
            out.write(b, 0, r);
        }
    }

@Cleanup自动帮我们调用 close() 方法进行关闭资源。

You can use @Cleanup to ensure a given resource is automatically cleaned up before the code execution path exits your current scope. You do this by annotating any local variable declaration with the @Cleanup annotation like so:
@Cleanup InputStream in = new FileInputStream("some/file");
As a result, at the end of the scope you‘re in, in.close() is called. This call is guaranteed to run by way of a
try/finally construct
.

If the type of object you‘d like to cleanup does not have a close() method, but some other no-argument method, you can
specify the name of this method like so:
@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0);
By default, the cleanup method is presumed to be close(). A cleanup method that takes 1 or more arguments cannot be called via
@Cleanup.

@Cleanup是通过 try/finally 实现的,如果资源的关闭方法不是默认的close(),那么也可以指定关闭方法的名称@Cleanup("closeMethod"), 但是关闭方法不能有参数,不然就无法使用 @Cleanup了。

更多的 参考 https://projectlombok.org/features/index.html

通过使用 Lombok,可以减少很多的 Java 代码的,减轻了心理负担。

时间: 2024-10-13 03:06:59

使用 Lombok 简化项目中无谓的Java代码的相关文章

安卓项目中的R.java文件丢失如何解决

第一种方法,也就是你的项目没有什么大的问题的话,那么就作出如图所示的选择,应该就可以解决你的问题了. 第二种就是看看你这边有没有勾选图中所示的选项,也就是你的r.java能不能自动生成. 第三种深层次一点的就是,你先clear一下,然后再build automatically一下,应该就可以了.如图所示. 如果这些都没能够解决你的问题,那么很可能是你很久没有开发项目了,你的sdk要更新了,如图所示. 以上四种方法基本可以解决你的这个问题.如没解决,可以留言. 安卓项目中的R.java文件丢失如何

03_Android项目中读写文本文件的代码

编写一下Android界面的项目 使用默认的Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.writedata" android:versionCode="1&qu

在PHP项目中使用Standford Moss代码查重系统

Standford Moss 系统是斯坦福大学大名鼎鼎的代码查重系统,它可以查出哪些同学提交的代码是抄袭别人的,从而将提交结果拒之门外.它对一切希望使用该系统的人都是开放的,那么在PHP的项目中如何使用它呢? 下载Moss的PHP文件moss.php 您可以访问https://github.com/Phhere/MOSS-PHP 来下载moss.php,并将它放在您的第三方扩展库中 使用moss.php 通过下面的范例代码您就可以简单的做个moss小测试了 <?phpinclude("mo

Findbug在项目中的运用--提高代码质量

 FindBugs是一个静态分析工具,它检查类或者 JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析 第一 手动安装 在Eclipse点击菜单中Help-->菜单 第二:输入地址: http://findbugs.cs.umd.edu/eclipse,出现版本列表: 按照一步步提示安装重启即可 =================================================== 2) (Re-)star

一个项目中如果有重复代码,如何变成一个标签使其通用?

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="Web.index" %> Page:所使用的是page页面,也就是所谓的aspx页面 AutoEventWireup:是否自动关联某些特殊事件(例如:Page_Load(),)默认true CodeBehind:属性并不是一个真正的 ASP.NET

unity3D项目中如何避免硬代码(C#)

平时做项目,代码中是不允许出现硬代码的,一般我们是怎么处理的呢? 那么硬代码又是什么呢? 我们俗称的硬代码:eg:  1 public UIlabel label; 2 label.text = "欢迎来到梦幻岛";  这样我们俗称为硬代码. 好了,那么该如何避免,话不多说,直接上图: 这是一种处理方式,TXT 格式的文档,前面是ID,后面是描述性文字. 可是我们该如何在项目中访问这个txt文件里面的数据呢? 话不多说,直接上代码: 1 using UnityEngine; 2 usi

使用spring提供的ReflectionUtils简化项目中反射代码的复杂性

在项目中有时候我们会使用到反射的功能,如果使用最原始的方法来开发反射的功能的话肯能会比较复杂,需要处理一大堆异常以及访问权限等问题.spring中提供了ReflectionUtils 这个反射的工具类,如果项目使用spring框架的话,使用这个工具可以简化反射的开发工作. 我们的目标是根据bean的名称.需要调用的方法名.和要传递的参数来调用该bean的特定方法. 下面直接上代码: import org.springframework.beans.factory.annotation.Autow

Web项目中诡异的java.lang.ClassNotFoundException: ch.qos.lorgback.classic.PatternLayout问题解决

引言: 诡异而少见的java.lang.ClassNotFoundException: ch.qos.lorgback.classic.PatternLayout异常错误信息,在启动的时候,出现了异常,哪里出了问题呢? 1.  背景介绍 项目是Web项目,使用了slf4j-api, 使用logback做为默认的日志包:之前一直工作正常,在将日志路径调整到了pom.xml之后,忽然就蹦出来一个异常错误信息. pom.xml中引用的maven片段: <dependency> <artifac

gradle项目中如何支持java与scala混合使用?

一.目录结构 二.build.gradle配置 group 'yjmyzz'version '1.0-SNAPSHOT'apply plugin: 'java'apply plugin: 'scala'apply plugin: 'application' //可选(可自动生成shell启动脚本)mainClassName = 'AppDemo' //可选(与上行的application插件配套出现) //这里是关键(把java与scala的源代码目录全映射到scala上,// 这样gradle