美文网首页
lombok的使用

lombok的使用

作者: ggr | 来源:发表于2018-04-02 21:48 被阅读0次

    今天看到峰哥(大神)写的的项目的pom里面引人了一个叫Lombok 的依赖,不认识便百度了一下结果如下:
       Lombok 就是一个可以帮助我们生成在运行期间动态加入样板文件的jar或者说插件。样板文件说白了就是我们通常就是之我们定义一个对象,除了必要的属性和方法,必须还要写一些getter和setter方法,可能还要写一个构造器、equals方法、或者hash方法.这些方法很冗长而且没有技术含量。

    lombok安装

    lombok的安装跟一般引用jar包没有什么区别,可以到官网上下载最新的jar包,然后导入到项目里面就好啦。

    Maven添加依赖

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>
    </dependencies>
    

    Intellij idea开发的话需要安装Lombok plugin,同时设置 Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾选。

    lombok使用

    lombok使用过程中主要是靠注解起作用的,官网上的文档里面有所有的注解,这里不一一罗列,只说明其中几个比较常用的。

    @NonNull: 可以帮助我们避免空指针。

    使用lombok:

    import lombok.NonNull;
        public class NonNullExample extends Something {
            private String name;  
            public NonNullExample(@NonNull Person person) {
            super("Hello World");
            this.name = person.getName();
        }
    }
    

    不使用lombok:

    public class NonNullExample extends Something {
        private String name;  
        public NonNullExample(@NonNull Person person) {
            super("Hello World");
            if (person == null) {
                throw new NullPointerException("person");
            }
            this.name = person.getName();
        }
    }
    

    @Cleanup: 自动帮我们调用close()方法。

    使用lombok:

    import lombok.Cleanup;
    import java.io.*;
    public class CleanupExample {
        public static void main(String[] args) throws IOException {
            @Cleanup InputStream in = new FileInputStream(args[0]);
            @Cleanup OutputStream out = new FileOutputStream(args[1]);
            byte[] b = new byte[1024];
            while (true) {
                int r = in.read(b);
                if (r == -1) break;
                out.write(b, 0, r);
            }
        }
    }
    

    不使用lombok:

    import java.io.*;
        public class CleanupExample {
            public static void main(String[] args) throws IOException {
                InputStream in = new FileInputStream(args[0]);
                try {
                    OutputStream out = new FileOutputStream(args[1]);
                    try {
                        byte[] b = new byte[1024];
                        while (true) {
                        int r = in.read(b);
                        if (r == -1) break;
                        out.write(b, 0, r);
                        }
                    } finally {
                        if (out != null) {
                            out.close();
                        }
                    }
                } finally {
                    if (in != null) {
                    in.close();
                }
            }
        }
    }
    

    @Getter / @Setter自动生成Getter/Setter方法

    使用lombok:

        import lombok.AccessLevel;
        import lombok.Getter;
        import lombok.Setter;
        public class GetterSetterExample {
            @Getter @Setter private int age = 10;
            @Setter(AccessLevel.PROTECTED) private String name;
        }
    

    不使用lombok:

    public class GetterSetterExample {
        private int age = 10;
        private String name;
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        protected void setName(String name) {
            this.name = name;
        }
    }
    

    @NoArgsConstructor: 自动生成无参数构造函数。

    @AllArgsConstructor: 自动生成全参数构造函数。

    @Data: 自动为所有字段添加@ToString为非final字段添加@Setter @Setter,和@RequiredArgsConstructor

    综合案例:

    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    @Log4j
    @ToString(exclude="age")//exclude设置方法返回不需要包含的属性
    public class Person {
    
        @NonNull private String username;
        @NonNull private int age;
        @NonNull private boolean sex;
        
        public static void main(String[] args) {
            Person person = new Person("ggr",1,true);
            System.out.println(person.getAge());
            @Cleanup InputStream inputStream = new FileInputStream("ggr.txt");
            
        }   
    }
    

    try-catch的就算了,jdk1.7之后会自动关闭了。
    更多请参考官方说明文档

    相关文章

      网友评论

          本文标题:lombok的使用

          本文链接:https://www.haomeiwen.com/subject/gtffhftx.html