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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA随笔----浅谈lombok注解
在Java开发中,注解可谓是帮了⼤忙。

注解的使⽤帮助我们简化了代码,让代码更加简洁。

今天就来谈谈常⽤的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){
= 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⼀直在扩展,将来肯定会加⼊更多的注解元素,欢迎各位补充。

相关文档
最新文档