zoukankan      html  css  js  c++  java
  • lombok插件

    1.Lombok插件使用注解的方式,在代码编译阶段按照一定的规则生成类的setter/getter/constructor/equals/hashCode等方法

    2.首先新建一个实体类,这里新建User.java

    3.@Setter @Getter 注解

      1)用在类上

    @Setter @Getter
    public class User {...}
    

       编译之后的User.class自动生成了属性id的setter和getter

    public class User {
        private String id;
    
        public User() {
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getId() {
            return this.id;
        }
    }
    2)用在方法上,生成的class文件和用在类上是一样的
    public class User {
        @Setter @Getter
        private String id;
    }
    @Setter和@Getter的value属性:设置setter和getter的访问级别,默认值是 AccessLevel.PUBLIC;
    @Setter(value = AccessLevel.PRIVATE)
    

      

    @Setter(AccessLevel.PRIVATE)
    

     @Setter & @Getter的onMethod属性:在注解中使用其他组件的注解(如hibernate,mybatis等)

      源文件:

    import lombok.AccessLevel;
    import lombok.Getter;
    import lombok.Setter;
    
    import javax.persistence.Column;
    
    public class User {
        @Setter(onMethod = @_(@Column(name="user_id"))) @Getter
        private String id;
    }
    

      User.class:其中@column注解便是使用@setter(onMethod=xx)进行方法注解的

    import javax.persistence.Column;
    
    public class User {
        private String id;
    
        public User() {
        }
    
        @Column(
            name = "user_id"
        )
        public void setId(String id) {
            this.id = id;
        }
    
        public String getId() {
            return this.id;
        }
    }
    

     @Getter的lazy属性:一般用在private final的缓存属性上,lazy默认是false,如果设置为true,则会在实际使用到缓存的时候才会生成缓存,并且Lombok会自动处理线程安全的问题。

    User.java
    public class User {
        @Getter(lazy = true)
        private final Map cache = initXXCatch();
        private Map initXXCatch(){
            return  new HashMap();
        }
    }
    
    User.class
    lazy=true  
      private final AtomicReference<Object> cache = new AtomicReference();
    
      public Map getCache() {
            Object value = this.cache.get();
            if (value == null) {
                AtomicReference var2 = this.cache;
                synchronized(this.cache) {
                    value = this.cache.get();
                    if (value == null) {
                        Map actualValue = this.initXXCatch();
                        value = actualValue == null ? this.cache : actualValue;
                        this.cache.set(value);
                    }
                }
            }
    
            return (Map)((Map)(value == this.cache ? null : value));
        }
    
    lazy=false生成的getter:
    private final Map cache = this.initXXCatch(); public Map getCache() { return this.cache; }

    @Setter的onParam属性:这个注解和onMethod一样,也是在注解中加入注解

    4.@NonNull注解:

    5.@ToString注解

    6.@EqualsAndHashCode注解

    7.@Data注解

    8.@Synchronized注解

    9.@SneakyThrows注解

  • 相关阅读:
    校内模拟赛 虫洞(by NiroBC)
    校内模拟赛 旅行(by NiroBC)
    P3830 [SHOI2012]随机树
    4358: permu
    【noi.ac】#309. Mas的童年
    P1438 无聊的数列
    2091: [Poi2010]The Minima Game
    LOJ #6074. 「2017 山东一轮集训 Day6」子序列
    LOJ #6068. 「2017 山东一轮集训 Day4」棋盘
    LOJ #6073. 「2017 山东一轮集训 Day5」距离
  • 原文地址:https://www.cnblogs.com/cici20166/p/8491155.html
Copyright © 2011-2022 走看看