JAVA随笔----浅谈lombok注解
2019-02-25 16:12:18来源:博客园 阅读 ()
在Java开发中,注解可谓是帮了大忙。注解的使用帮助我们简化了代码,让代码更加简洁。今天就来谈谈常用的Lombok注解。
lombok注解文档
lombok官方下载地址
先看一下lombok支持的一些常见的注解:
- @NonNull
- @Getter/@Setter
- @Cleanup
- @ToString
- @EqualsAndHashCode
- @EqualsAndHashCode
- @NoArgsConstructor
- @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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash