文档章节

lombok深入实践

春天springcarter
 春天springcarter
发布于 10/10 20:31
字数 1299
阅读 52
收藏 0

官网视频

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

官网的首页视频演示在eclipse中如何使用Lombok;

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

翻译:

Lombok项目是一个java的库,可以自动的通过插件的方式安装到你的编辑器和构建工具中,给你的Java代码调味,再也不用写 getter和equals方法了,通过一个类上的注解你拥有了建造者的特征,自动的声明了一个日志变量,还有更多功能;

特征列表

val

自由使用final本地变量; 从0.10版本开始引入 你可以使用val作为本地变量的申明,来替代写它的实际类型。如果你这样做了,类型将会从初始化表达式中被推断,本地变量也会被设置为final,这个特征工作在如下场景: 1.本地变量; 2.foreach循环; 在类的成员中并不会生效,初始化表达式是需要的。 val实际上是一个类型的排序,作为一个真实的类存在于lombok的包中,你必须引入val才能工作(或者使用lombok.val作为类型),在本地变量声明中这种类型的存在会触发两个操作: 1.增加final关键字; 2.复制初始化表达式的类型,用来重写这个伪造的val类型; 注意这个功能在netbeans中不会起作用;

注意事项:

对于混合的类型,会推断得到公共的父类,而不是共享的接口。 在含糊的场景下:如果初始化为null,会推断得到Object.

实例代码:不适用lombok;

package com.springpractice._val;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * Hello world!
 */
public class App {

    public String test1() {
        final ArrayList<String> exampleList = new ArrayList<>();
        exampleList.add("hello world");

        final String firstElement = exampleList.get(0);
        final String returnString = firstElement.toLowerCase();
        System.out.println(returnString);
        return returnString;
    }

    public void test2() {

        final HashMap<Integer, String> map = new HashMap<>();
        map.put(0, "zero");
        map.put(5, "five");

        for (final Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.printf("%d: %s \n", entry.getKey(), entry.getValue());
        }

    }


    public static void main(String[] args) {
        final App app = new App();
        app.test1();
        System.out.println("======");
        app.test2();

    }

}

使用lombok ;

package com.springpractice._val;

import lombok.val;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Hello world!
 */
public class AppLombok {
		 //不能使用在类的成员变量上,会报编译错误
			// val String name;
    public String test1() {
        val exampleList = new ArrayList<String>();
        exampleList.add("hello world");

        val firstElement = exampleList.get(0);

        final String returnString = firstElement.toLowerCase();
        System.out.println(returnString);
        return returnString;
    }

    public void test2() {

        val map = new HashMap<Integer, String>();
        map.put(0, "zero");
        map.put(5, "five");

        for (val entry : map.entrySet()) {
            System.out.printf("%d: %s \n", entry.getKey(), entry.getValue());
        }

    }


    public static void main(String[] args) {
        final AppLombok app = new AppLombok();
        app.test1();
        System.out.println("======");
        app.test2();

    }
}


var

替代本地变量;

package com.springpractice._var;

import lombok.var;

import java.awt.*;

/**
 * 说明:var的使用
 * @author carter
 * 创建时间: 2019年10月10日 20:08
 **/

public class App {

    public static void main(String[] args) {

        var x = "Hello";

        //编译报错,类型是String
//        x=1;

        var y = Color.RED;

//        y=x;

        //var的类型如果是object ,则不是它的使用场景
        var z = new Object();

        z = x;

        System.out.println(x);

    }

}

NonNull

自动检查,告别NPE的爱恨情仇。

不使用lombok;

package com.springpractice.nonnull;

import lombok.NonNull;

import java.util.Objects;

/**
 * 说明:TODO
 * @author carter
 * 创建时间: 2019年10月10日 20:16
 **/

public class App  extends Something{

    private String name;

    public App(Person person){
        super("Hello");
        if (Objects.isNull(person)){
            throw new NullPointerException("person is marked @NonNull but is null");
        }
        this.name = person.getName();

    }

    public static void main(String[] args) {
        new App(null);
    }

}

使用lombok;

package com.springpractice.nonnull;

import lombok.NonNull;

/**
 * 说明:TODO
 * @author carter
 * 创建时间: 2019年10月10日 20:20
 **/

public class AppLombok extends Something {

    private String name;

    public AppLombok(@NonNull Person person){
        super("Hello");
        this.name = person.getName();
    }

    public static void main(String[] args) {
        new AppLombok(null);
    }


}


效果一样:

/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/tools.jar:/Users/lifesense-szyf01/src/git/github/springbootpractice/lombok-demo/target/classes:/Users/lifesense-szyf01/.m2/repository/org/projectlombok/lombok/1.18.8/lombok-1.18.8.jar com.springpractice.nonnull.AppLombok
Exception in thread "main" java.lang.NullPointerException: person is marked non-null but is null
	at com.springpractice.nonnull.AppLombok.<init>(AppLombok.java:15)
	at com.springpractice.nonnull.AppLombok.main(AppLombok.java:21)

Process finished with exit code 1

代码路径: git@github.com:carterbrother/springbootpractice.git/lombok-demo

原创不易,转载请注明出处。

© 著作权归作者所有

春天springcarter
粉丝 1
博文 20
码字总数 17370
作品 0
深圳
私信 提问
聊聊lombok构造模式的参数校验

序 本文主要聊一下在lombok的builder模式下,如何进行参数校验。 maven 本文基于1.16.16版本来讲 lombok的builder实例 这个@Data,是个组合的注解,具体如下 @Builder会按builder模式生成一个...

go4it
2017/10/27
123
1
以简单的方式消除 Java 的冗长(Lombok)

复制的红薯的,自己只是做一个归档,方便自己看。 ------------------------------------------------------------------------------------ Lombok 是一种 Java Archive (JAR) 文件,可用来...

qqli
2012/12/27
265
0
以简单的方式消除 Java 的冗长

Lombok 是一种 Java Archive (JAR) 文件,可用来消除 Java 代码的冗长。 我们看这样一个例子,一个标准的 Java bean。一个典型的 Java bean 一般具有几个属性。每个属性具有一个 accessor 和...

红薯
2010/04/13
1K
6
Lombok 使用小结

Lombok 简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以...

静默虚空
2017/11/09
0
0
IntelliJ IDEA lombok插件的安装和使用

IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多。lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过lombok注解减少getter、setter等方法...

jxlgzwh
04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Andorid SQLite数据库开发基础教程(2)

Andorid SQLite数据库开发基础教程(2) 数据库生成方式 数据库的生成有两种方式,一种是使用数据库管理工具生成的数据库,我们将此类数据库称为预设数据库,另一种是使用代码生成的数据库。...

大学霸
28分钟前
3
0
YecPad 开源啦!: 基于C#的功能强大的可编辑记事本文本编辑软件

JY Lin 开源:YecPad : 基于C#的功能强大的可编辑记事本文本编辑软件 YecPad 是一款基于C#编程语言开发的功能强大的可编辑记事本文本编辑软件。 可以进行文本文件的打开、保存、删除及编辑功...

YDOOK
35分钟前
3
0
StringBuilder 与 StringBuffer 的区别

StringBuffer是线性安全的,支持并发操作,适合多线程。 StringBuilder线性不安全,不支持并发操作,适合单线程。 也就是说他们俩区别就在于支不支持并发操作,使用上基本上类似...

无名氏的程序员
38分钟前
3
0
js 找数组中的最值

本文转载于:专业的前端网站➸js 找数组中的最值 背景: 2个数组以下 , 比如 [[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]] 找最值的时候,我一开始想用两个...

前端老手
47分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部