• Lombok介绍及使用方法


      最近看Disconf源码的时候,发现很多地方报错,字段的get方法获取不到,类名前面都加了个@Data的注解,百度了一下这个注解,进一步了解到Lombok的功能,真是相见恨晚啊,一直都有这样的想法,终于不经意被看到了。看来后面还是要多看看别人的源码啊

      这里把里面最常用的功能记下来,更多的内容可以到官网上去查查。地址如下:

        lombok的官方地址:https://projectlombok.org/

        lombok的Github地址:https://github.com/rzwitserloot/lombok

      Idea下安装方法参照我写的另一篇文章:http://www.cnblogs.com/aligege/p/7797642.html

     

    几个比较常用的注解:

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

    使用lombok:

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

    不使用lombok:

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

    2、@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[10000];
            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[10000];
                        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();
                }
            }
        }
    }

    3、@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, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!

     

  • 相关阅读:
    如何将数组初始化为全0?
    什么是优先级队列(priority queue)?
    C语言中指针的指针是如何工作的?
    什么是队列(Queue)?
    理解*ptr++
    【Luogu】P4172水管局长(LCT)
    【Luogu】P4159迷路(矩阵优化)
    【Luogu】P3971Alice And Bob(贪心)
    【Luogu】P3211XOR和路径(高斯消元)
    【Luogu】P2445动物园(最大流)
  • 原文地址:https://www.cnblogs.com/aligege/p/7797608.html
Copyright © 2020-2023  润新知