-
val:
修饰的变量无需指定类型,且变量为不可变(使用 final 修饰)。
-
var:
修饰的变量无需指定类型,变量为可变类型。
-
@NonNull
修饰的变量不能为空,为空则报 NullPointerException。
-
@Cleanup
修饰的变量资源在代码块结束后会自动清理,调用 close 方法。
@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);
}
-
@Getter/@Setter
修饰的变量自动生成 set get 方法。
-
@ToString
修饰的对象自动生成 ToString 方法。
-
@EqualsAndHashCode
-
@ NoArgsConstructor,@ RequiredArgsConstructor,@ AllArgsConstructor
对象构造器。
-
@Data
综合注解。
-
@Value
修饰的类的字段为 final 不可变。
-
@Builder
作用于类,该类对象可使用链式编程构造。
@Test
public void test() {
Person person = Person.builder()
.name("test")
.age(29)
.build();
}
-
@SneakyThrows
作用于方法,可自动生成 try{}catch(){}语句。
-
@Synchronized
修饰的方法自动创建锁对象,并使用 synchronized 修饰代码块(每个方法都是使用不同的锁对象)。
public class SynchronizedExample {
private final Object readLock = new Object();
@Synchronized
public static void hello() {
System.out.println("world");
}
@Synchronized
public int answerToLife() {
return 42;
}
@Synchronized("readLock")
public void foo() {
System.out.println("bar");
}
}
public class SynchronizedExample {
private static final Object $LOCK = new Object[0];
private final Object $lock = new Object[0];
private final Object readLock = new Object();
public static void hello() {
synchronized($LOCK) {
System.out.println("world");
}
}
public int answerToLife() {
synchronized($lock) {
return 42;
}
}
public void foo() {
synchronized(readLock) {
System.out.println("bar");
}
}
}
-
@Getter(lazy = true)
修饰的变量为 final 不可变类型,可在计算复杂的变量时使用,第一次的计算结果将会被缓存,不会出现重复赋值的情况,可用于单例对象 double check lock 的机制。
-
@Log
日志输出。