JAVA随笔----浅谈lombok注解

2019-02-25 16:12:18来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

在Java开发中,注解可谓是帮了大忙。注解的使用帮助我们简化了代码,让代码更加简洁。今天就来谈谈常用的Lombok注解。

lombok注解文档

lombok官方下载地址

先看一下lombok支持的一些常见的注解:

  1. @NonNull
  2. @Getter/@Setter
  3. @Cleanup
  4. @ToString
  5. @EqualsAndHashCode
  6. @EqualsAndHashCode
  7. @NoArgsConstructor
  8. @AllArgsConstructor

@NonNull

NonNull注解可以用在成员方法或者构造方法的参数前面,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常,举个例子来看看:

public String getName(@NonNull User user){
    return user.getName();
}

那如果不使用注解我们要怎么实现上述代码呢:

public String getName(@NonNull User user){
    if(p==null){
        throw new NullPointerException("userIsNull");
    }
    return user.getName();
}

这两段代码的实际效果是一样的,由此可见注解在编程中可以帮我们简化代码。

NonNull注解也可以用在方法上,效果是一样的,就不再上代码了??

@Getter/@Setter

这两个注解就不必多说了,从名字上就很好理解,用在类上,可以为此类里的所有非静态成员变量生成对应的get和set方法。

还可以用在成员变量前面,相当于为成员变量生成对应的get和set方法,同时还可以为生成的方法指定访问修饰符,默认为public,直接来看下面的简单的例子:

@Getter
@Setter
public class User{  
    private String name;   
    private int age;
}

public class User{ @Getter @Setter private String name; @Setter(AccessLevel.PROTECTED) private int age; }

上面的代码就相当于:

  public class User{
        private String name;
        private Integer age;
        private String language;

        public void setName(String name){
            this.name = name;
        }

        public String getName(){
            return name;
        }

        public void setAge(Integer age){
            this.age = age;
        }
        public Integer setAge(){
            return  age;
        }
    }

@NoArgsConstructor/@AllArgsConstructor

如果说一个实体类除了上面讲的@Getter/@Setter注解自动生成get和set方法,必不可少的就是它的构造方法,这两个注解就帮我们很好的解决了构造方法的问题。

@NoArgsConstructor 从名字上就知道是生成无参的构造方法,那@AllArgsConstructor注解就是生成包含所有参数的构造方法。

这两个注解全部是用在类上。

注意:如果类中含有final修饰的成员变量,是无法使用@NoArgsConstructor注解的 

          如果特殊情况只需要某个类中一个或几个参数的构造方法,上面两个注解就不是特别合适了。

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class AccessToken {
 
    private String accessId;
 
    private int expiresName;
}

@Cleanup

 @Cleanup注解用在变量前面,变量代表的资源会被自动关闭,默认是调用资源的close()方法,如果该资源有其它关闭方法,可使用@Cleanup(“methodName”)来指定要调用的方法。

这里我们就用简单的IO流示范:

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

 

如果不加注解是怎么实现

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

这样一看代码是不是简单了许多。

@ToString/@EqualsAndHashCode

这两个注解也比较好理解,就是生成toString,equals和hashcode方法,同时后者还会生成一个canEqual方法,用于判断某个对象是否是当前类的实例,

生成方法时只会使用类中的非静态和非transient成员变量。 

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class AccessToken {
 
    private String accessId;
 
    private int expiresName;
}

看!这样是不是显得整个类很清爽。

@ToString/@EqualsAndHashCode这两个注解也可以添加限制条件,例如用@ToString(exclude={“param1”,“param2”})来排除param1和param2两个成员变量,或者用@ToString(of={“param1”,“param2”})来指定使用param1和param2两个成员变量,@EqualsAndHashCode注解也有同样的用法。

 

 当然,lombok常用的注解不只这几个,还有其他一些注解需要大家自己去摸索,同时lombok一直在扩展,将来肯定会加入更多的注解元素,欢迎各位补充。

 


原文链接:https://www.cnblogs.com/java-all/p/10426328.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java8与传统的日期和时间类详解

下一篇:SSM框架——SpringMVC+Spring+Mybatis搭建教程