经常用 @Data
注解标记在实体类上面快速实现getter
和 setter
, 而它好用地注解应该不至于这一个,下面是常用的注解汇总:
1. @Data
注解 : 一般用在类上,提供类所有属性的 get
和 set
方法,此外还提供了equals
、canEqual
、hashCode
、toString
等方法;
2. @Setter
注解:一般用在属性上,为属性提供 set
方法, 用在再类上则表示当前类中所有属性都生成set
方法;
3. @Getter
注解:用在属性上,为属性提供 get
方法, 用在再类上表示当前类中所有属性都生成get
方法;
4. @Log4j or @Slf4j
注解 :用在类上,为类提供一个 属性名为log
的 log4j
日志对象;
5. @NoArgsConstructor
注解:用在类上,为类提供一个无参的构造方法;
6. @AllArgsConstructor
注解:用在类上,为类提供一个全参的构造方法;
7. @RequiredArgsConstructor
注解: 用在类上,生成一个包含 "特定参数" 的构造器,特定参数指的是那些有加上 final
修饰词的变量们;
8. @Builder
注解: 用在类上,自动生成流式 set 值写法,从此之后再也不用写一堆 setter 了;
注意,虽然只要加上 @Builder 注解,我们就能够用流式写法快速设定对象的值,但是 setter 还是必须要写不能省略的,因为 Spring 或是其他框架有很多地方都会用到对象的 getter/setter 对他们取值/赋值所以通常是 @Data
和 @Builder
会一起用在同个类上,既方便我们流式写代码,也方便框架做事;
9. @Cleanup
注解: 可以用在 IO 流上,用于关闭并释放资源;
例如下面例子,每次IO流操作后要在finally
中关闭流,释放资源:
public class CleanupExample {
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();
}
}
}
}
类似以上的一个IO流操作的方法使用lombok 的 @Cleanup
注解后可以简化成这样:
public class CleanupExample {
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[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
-
@SneakyThrows
注解:利用了这一机制,将当前方法抛出的异常,包装成RuntimeException,骗过编译器,使得调用点可以不用显示处理异常信息,使用注解后不需要担心Exception的处理。例如:
import lombok.SneakyThrows;
public class SneakyThrowsExample implements Runnable {
@SneakyThrows(UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) {
return new String(bytes, "UTF-8");
}
@SneakyThrows
public void run() {
throw new Throwable();
}
}
真正生成的代码
import lombok.Lombok;
public class SneakyThrowsExample implements Runnable {
public String utf8ToString(byte[] bytes) {
try {
return new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw Lombok.sneakyThrow(e);
}
}
public void run() {
try {
throw new Throwable();
} catch (Throwable t) {
throw Lombok.sneakyThrow(t);
}
}
}
网友评论