zoukankan      html  css  js  c++  java
  • 20190905 Lombok常用注解

    Lombok常用注解

    val

    用于声明类型,将从初始化表达式推断出类型,仅适用于局部变量和foreach循环,而不适用于字段。声明的局部变量为final变量。

    Java自带类型推断随着JDK版本提升越来越好用,这个注解用处不大。

    val j = 2;
    val map = new HashMap<Integer, String>();
    for (val entry : map.entrySet()) {
    }
    

    var

    var完全一样val,除了局部变量没有标记为final
    可以再次赋值,但是不能赋予不同类型。

    用处不大。

    @NonNull

    使用@NonNull方法或构造函数的参数让lombok为您生成null-check语句。

    注解类字段时,生成的Setter方法和构造器中会执行非空检查。

    @Setter
    @NonNull
    private String name;
    
    public void test1(@NonNull String s1, String s2) {
        System.out.println(s1 + s2);
    
    }
    

    @Cleanup

    用于局部变量,使用@Cleanup以确保在代码执行路径退出当前作用域之前自动清除给定资源。

    默认情况下,清除方法被假定为close()。可以指定其他无参方法。

    调用清理方法的顺序是声明顺序的倒序。

    更推荐使用try-with-resource语法。

    public class CleanupExample {
        public static void main(String[] args) throws IOException {
            @Cleanup CleanupExample cleanupExample1 = new CleanupExample();
            @Cleanup("other") CleanupExample cleanupExample2 = new CleanupExample();
    
            @Cleanup InputStream is = new FileInputStream("abc");
        }
    
        public static void close() {
            System.out.println("close...");
        }
    
        public static void other() {
            System.out.println("other...");
        }
    }
    

    @Getter和@Setter

    用于类和类字段上,让lombok自动生成默认的 getter / setter。

    可以在类上放置@Getter和/或@Setter注释。在这种情况下,就像使用注释注释该类中的所有非静态字段一样。对于静态字段,只生成Getter方法。

    @Getter(lazy=true)

    private final 字段生成线程安全的懒加载方法。

    @ToString

    可以使用@ToString生成toString()方法的实现来注释任何类定义。默认情况下,它会按顺序打印类名称以及每个字段,并以逗号分隔。

    可以通过@ToString的一些属性控制类中的字段是否打印。

    @EqualsAndHashCode

    从对象的字段生成hashCodeequals实现。

    可以通过@EqualsAndHashCode的一些属性进行控制。

    @NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor

    @NoArgsConstructor:无参构造函数
    @RequiredArgsConstructor: 未初始化的final字段,标记为@NonNull且未初始化的字段
    @AllArgsConstructor:参数为类中的所有字段

    @Data

    @ToString, @EqualsAndHashCode, @Getter(所有非static字段), @Setter(非final和static字段),@RequiredArgsConstructor

    Value

    用于类上。

    @Data的不可变形式。

    @Builder

    为类生成Builder模式的API。

    @Builder.Default

    在单字段上设置默认值

    @Builder.Default private final long created = System.currentTimeMillis();
    

    @Singular

    @Singular只能应用于lombok已知的集合类型。

    lombok将该字段视为集合,并生成2个“加法器”方法而不是Setter方法。

    @SneakyThrows

    @SneakyThrows可以用来偷偷抛出已检查的异常而不在方法的throws子句中实际声明这一点。
    可以抛出非RuntimeException及其子类,而不用在方法上声明。

    @SneakyThrows
    public static void testSneakyThrows() {
        throw new Throwable();
    }
    

    @Synchronized

    用于方法上。

    @Synchronizedsynchronized修饰符的更安全的变体。

    @Log

    @CommonsLog

    org.apache.commons.logging.Log

    @Flogger

    com.google.common.flogger.FluentLogger

    @JBossLog

    org.jboss.logging.Logger

    @Log

    java.util.logging.Logger

    @Log4j

    org.apache.log4j.Logger

    @Log4j2

    org.apache.logging.log4j.Logger

    @Slf4j

    org.slf4j.Logger

    @XSlf4j

    org.slf4j.ext.XLogger

    参考资料

  • 相关阅读:
    CodeForces 825G"Tree Queries"(选根建树)
    技术日记
    [express.js 使用笔记] ajax询问数据,却显示在浏览器上,该怎么办?
    node.js 基础和文件操作 笔记
    JSON 笔记
    CSS 学习笔记(一)选择器
    cf1321E
    [学习笔记] 后缀数组
    Python 编程练习
    《明朝那些事儿》 读书笔记
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11469222.html
Copyright © 2011-2022 走看看