• lombok使用手册


    lombok使用手册:

    1、安装插件

    1.1、idel:

    elipse:下载地址https://projectlombok.org/download

    运行jar文件

    1.2、使用lombok还需要引用相关jar包

    参考网址:https://projectlombok.org/features/all

    2、注解说明

    2.1、@Data

    @Data
    All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor!
    Lombok代码:

    @Data
    public class Lombok {
        private String name;
        private String age;
    }

    编译后代码:

    public class Lombok {
        private String name;
        private String age;
    
        public Lombok() {
        }
    
        public String getName() {
            return this.name;
        }
    
        public String getAge() {
            return this.age;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public boolean equals(Object o) {
            if(o == this) {
                return true;
            } else if(!(o instanceof Lombok)) {
                return false;
            } else {
                Lombok other = (Lombok)o;
                if(!other.canEqual(this)) {
                    return false;
                } else {
                    String this$name = this.getName();
                    String other$name = other.getName();
                    if(this$name == null) {
                        if(other$name != null) {
                            return false;
                        }
                    } else if(!this$name.equals(other$name)) {
                        return false;
                    }
    
                    String this$age = this.getAge();
                    String other$age = other.getAge();
                    if(this$age == null) {
                        if(other$age != null) {
                            return false;
                        }
                    } else if(!this$age.equals(other$age)) {
                        return false;
                    }
    
                    return true;
                }
            }
        }
    
        protected boolean canEqual(Object other) {
            return other instanceof Lombok;
        }
    
        public int hashCode() {
            boolean PRIME = true;
            byte result = 1;
            String $name = this.getName();
            int result1 = result * 59 + ($name == null?43:$name.hashCode());
            String $age = this.getAge();
            result1 = result1 * 59 + ($age == null?43:$age.hashCode());
            return result1;
        }
    
        public String toString() {
            return "Lombok(name=" + this.getName() + ", age=" + this.getAge() + ")";
        }
    }

    2.2、@val

    编译前代码:

        val example = new ArrayList<String>();
        example.add("Hello, World!");
        val foo = example.get(0);
        return foo.toLowerCase();
    
        val map = new HashMap<Integer, String>();
        map.put(0, "zero");
        map.put(5, "five");
        for (val entry : map.entrySet()) {
          System.out.printf("%d: %s
    ", entry.getKey(), entry.getValue());
        }

    编译后代码:

        final ArrayList<String> example = new ArrayList<String>();
        example.add("Hello, World!");
        final String foo = example.get(0);
        return foo.toLowerCase();
    
        final HashMap<Integer, String> map = new HashMap<Integer, String>();
        map.put(0, "zero");
        map.put(5, "five");
        for (final Map.Entry<Integer, String> entry : map.entrySet()) {
          System.out.printf("%d: %s
    ", entry.getKey(), entry.getValue());
        }

    2.3、@var 用法参考@val

    2.4、@NonNull

    编译前代码:

      public NonNullExample(@NonNull Person person) {
        this.name = person.getName();
      }

    编译后代码:

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

    2.5、@Cleanup

    编译前代码:

        @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);
        }

    编译后代码:

        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();
          }
        }

     2.6、@Getter、@Setter

    编译前代码:

      @Getter @Setter private int age = 10;
      @Setter private String name;

    编译后代码:

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

    2.7、@ToString

    编译前代码:

    @ToString
    public class Lombok {
        @Getter @Setter String name;
        @Getter @Setter private String age;
        @ToString.Exclude String id;
    }

    编译后代码:

    public class Lombok {
        String name;
        private String age;
        String id;
    
        public Lombok() {
        }
    
        public String toString() {
            return "Lombok(name=" + this.getName() + ", age=" + this.getAge() + ")";
        }
    
        public String getName() {
            return this.name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return this.age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    }

    2.8、@EqualsAndHashCode

    编译前代码:

    @EqualsAndHashCode
    public class Lombok {
        @Getter @Setter String name;
        @Getter @Setter private String age;
        @EqualsAndHashCode.Exclude String id;
    }

    编译后代码:

    public class Lombok {
        String name;
        private String age;
        String id;
    
        public Lombok() {
        }
    
        public boolean equals(Object o) {
            if(o == this) {
                return true;
            } else if(!(o instanceof Lombok)) {
                return false;
            } else {
                Lombok other = (Lombok)o;
                if(!other.canEqual(this)) {
                    return false;
                } else {
                    String this$name = this.getName();
                    String other$name = other.getName();
                    if(this$name == null) {
                        if(other$name != null) {
                            return false;
                        }
                    } else if(!this$name.equals(other$name)) {
                        return false;
                    }
    
                    String this$age = this.getAge();
                    String other$age = other.getAge();
                    if(this$age == null) {
                        if(other$age != null) {
                            return false;
                        }
                    } else if(!this$age.equals(other$age)) {
                        return false;
                    }
    
                    return true;
                }
            }
        }
    
        protected boolean canEqual(Object other) {
            return other instanceof Lombok;
        }
    
        public int hashCode() {
            boolean PRIME = true;
            byte result = 1;
            String $name = this.getName();
            int result1 = result * 59 + ($name == null?43:$name.hashCode());
            String $age = this.getAge();
            result1 = result1 * 59 + ($age == null?43:$age.hashCode());
            return result1;
        }
    
        public String getName() {
            return this.name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return this.age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    }

    2.9、@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor构造器

    编译前代码:

    @RequiredArgsConstructor(staticName = "of")
    @AllArgsConstructor(access = AccessLevel.PROTECTED)
    public class ConstructorExample<T> {
      private int x, y;
      @NonNull private T description;
      
      @NoArgsConstructor
      public static class NoArgsExample {
        @NonNull private String field;
      }
    }

    编译后代码:

     public class ConstructorExample<T> {
      private int x, y;
      @NonNull private T description;
      
      private ConstructorExample(T description) {
        if (description == null) throw new NullPointerException("description");
        this.description = description;
      }
      
      public static <T> ConstructorExample<T> of(T description) {
        return new ConstructorExample<T>(description);
      }
      
      @java.beans.ConstructorProperties({"x", "y", "description"})
      protected ConstructorExample(int x, int y, T description) {
        if (description == null) throw new NullPointerException("description");
        this.x = x;
        this.y = y;
        this.description = description;
      }
      
      public static class NoArgsExample {
        @NonNull private String field;
        
        public NoArgsExample() {
        }
      }
    }

    2.10、@Value用法参考@Data默认设置为final,会被其他注解显示生效

    2.11、@Builder

    编译前代码:

    @Builder
    public class BuilderExample {
        @Builder.Default private long created = System.currentTimeMillis();
        private String name;
        private int age;
        @Singular
        private Set<String> occupations;
    }

    编译后代码:

    public class BuilderExample {
        private long created;
        private String name;
        private int age;
        private Set<String> occupations;
    
        private static long $default$created() {
            return System.currentTimeMillis();
        }
    
        BuilderExample(long created, String name, int age, Set<String> occupations) {
            this.created = created;
            this.name = name;
            this.age = age;
            this.occupations = occupations;
        }
    
        public static BuilderExample.BuilderExampleBuilder builder() {
            return new BuilderExample.BuilderExampleBuilder();
        }
    
        public static class BuilderExampleBuilder {
            private boolean created$set;
            private long created$value;
            private String name;
            private int age;
            private ArrayList<String> occupations;
    
            BuilderExampleBuilder() {
            }
    
            public BuilderExample.BuilderExampleBuilder created(long created) {
                this.created$value = created;
                this.created$set = true;
                return this;
            }
    
            public BuilderExample.BuilderExampleBuilder name(String name) {
                this.name = name;
                return this;
            }
    
            public BuilderExample.BuilderExampleBuilder age(int age) {
                this.age = age;
                return this;
            }
    
            public BuilderExample.BuilderExampleBuilder occupation(String occupation) {
                if(this.occupations == null) {
                    this.occupations = new ArrayList();
                }
    
                this.occupations.add(occupation);
                return this;
            }
    
            public BuilderExample.BuilderExampleBuilder occupations(Collection<? extends String> occupations) {
                if(this.occupations == null) {
                    this.occupations = new ArrayList();
                }
    
                this.occupations.addAll(occupations);
                return this;
            }
    
            public BuilderExample.BuilderExampleBuilder clearOccupations() {
                if(this.occupations != null) {
                    this.occupations.clear();
                }
    
                return this;
            }
    
            public BuilderExample build() {
                Set occupations;
                switch(this.occupations == null?0:this.occupations.size()) {
                case 0:
                    occupations = Collections.emptySet();
                    break;
                case 1:
                    occupations = Collections.singleton(this.occupations.get(0));
                    break;
                default:
                    LinkedHashSet occupations1 = new LinkedHashSet(this.occupations.size() < 1073741824?1 + this.occupations.size() + (this.occupations.size() - 3) / 3:2147483647);
                    occupations1.addAll(this.occupations);
                    occupations = Collections.unmodifiableSet(occupations1);
                }
    
                long created$value = this.created$value;
                if(!this.created$set) {
                    created$value = System.currentTimeMillis();
                }
    
                return new BuilderExample(created$value, this.name, this.age, occupations);
            }
    
            public String toString() {
                return "BuilderExample.BuilderExampleBuilder(created$value=" + this.created$value + ", name=" + this.name + ", age=" + this.age + ", occupations=" + this.occupations + ")";
            }
        }
    }

     2.12、@SneakyThrows

    编译前代码:

     @SneakyThrows(UnsupportedEncodingException.class)
      public String utf8ToString(byte[] bytes) {
        return new String(bytes, "UTF-8");
      }
      
      @SneakyThrows
      public void run() {
        throw new Throwable();
      }

    编译后代码:

      public String utf8ToString(byte[] bytes) {
        try {
          return new String(bytes, "UTF-8");
        } catch (UnsupportedEncodingException e) {
          throw Lombok.sneakyThrow(e);
        }
      }
      
      public void run() {
        try {
          throw new Throwable();
        } catch (Throwable t) {
          throw Lombok.sneakyThrow(t);
        }
      }

    2.13、@Synchronized

    编译前代码:

    public class SynchronizedExample {
      private final Object readLock = new Object();
      
      @Synchronized
      public static void hello() {
        System.out.println("world");
      }
      
      @Synchronized
      public int answerToLife() {
        return 42;
      }
      
      @Synchronized("readLock")
      public void foo() {
        System.out.println("bar");
      }
    }

    编译后代码:

     public class SynchronizedExample {
      private static final Object $LOCK = new Object[0];
      private final Object $lock = new Object[0];
      private final Object readLock = new Object();
      
      public static void hello() {
        synchronized($LOCK) {
          System.out.println("world");
        }
      }
      
      public int answerToLife() {
        synchronized($lock) {
          return 42;
        }
      }
      
      public void foo() {
        synchronized(readLock) {
          System.out.println("bar");
        }
      }
    }

    2.14、@With 必须要包含全参数构造器

    编译前代码:

    @AllArgsConstructor
    public class Lombok {
        @With private Integer x;
        @With private Integer y;
        @With private Integer z;
    }

    编译后代码:

    public class Lombok {
        private Integer x;
        private Integer y;
        private Integer z;
    
        public Lombok(Integer x, Integer y, Integer z) {
            this.x = x;
            this.y = y;
            this.z = z;
        }
    
        public Lombok withX(Integer x) {
            return this.x == x?this:new Lombok(x, this.y, this.z);
        }
    
        public Lombok withY(Integer y) {
            return this.y == y?this:new Lombok(this.x, y, this.z);
        }
    
        public Lombok withZ(Integer z) {
            return this.z == z?this:new Lombok(this.x, this.y, z);
        }
    }

    2.15、@Getter(lazy=true)缓存

    编译前代码:

    public class Lombok {
        @Getter(lazy=true) private final int[] cached = expensive();
    
        private int[] expensive() {
            int[] result = new int[1000000];
            for (int i = 0; i < result.length; i++) {
                result[i] = i;
            }
            return result;
        }
    }

    编译后代码:

    public class Lombok {
        private final AtomicReference<Object> cached = new AtomicReference();
    
        public Lombok() {
        }
    
        private int[] expensive() {
            int[] result = new int[1000000];
    
            for(int i = 0; i < result.length; result[i] = i++) {
                ;
            }
    
            return result;
        }
    
        public int[] getCached() {
            Object value = this.cached.get();
            if(value == null) {
                AtomicReference var2 = this.cached;
                synchronized(this.cached) {
                    value = this.cached.get();
                    if(value == null) {
                        int[] actualValue = this.expensive();
                        value = actualValue == null?this.cached:actualValue;
                        this.cached.set(value);
                    }
                }
            }
    
            return (int[])((int[])(value == this.cached?null:value));
        }
    }

    2.16、日志@Log (and friends)

     @CommonsLog
        Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
    @Flogger
        Creates private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();
    @JBossLog
        Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
    @Log
        Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
    @Log4j
        Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
    @Log4j2
        Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
    @Slf4j
        Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
    @XSlf4j
        Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
    @CustomLog
        Creates private static final com.foo.your.Logger log = com.foo.your.LoggerFactory.createYourLogger(LogExample.class);

    @Log
    public class Lombok {
        @Getter(lazy=true) private final int[] cached = expensive();
    
        private int[] expensive() {
            int[] result = new int[1000000];
            for (int i = 0; i < result.length; i++) {
                result[i] = i;
            }
            log.severe(result.toString());
            return result;
        }
    }

    2.17、额外的注解见链接https://projectlombok.org/features/all

  • 相关阅读:
    函数对象中的prototype属性
    undefined和null的区别
    访问修饰符
    继承
    静态成员和实例成员的区别
    js模拟Trim()方法
    连接池的执行原理
    Javascript中的= =(等于)与= = =(全等于)区别
    数据库中创建约束
    KM算法入门
  • 原文地址:https://www.cnblogs.com/miaosj/p/11760054.html
Copyright © 2020-2023  润新知