@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法
作用于成员变量上,生成该成员变量的getter/setter方法
Getter(lazy=true) 懒加载
public @interface Getter {
AccessLevel value() default AccessLevel.PUBLIC;
Getter.AnyAnnotation[] onMethod() default {};
boolean lazy() default false;
@ToString:作用于类,覆盖默认的toString()方法,可以通过includeFieldNames属性限定显示某些字段,通过exclude属性排除某些字段。callSuper 是否输出超类
public @interface ToString {
boolean includeFieldNames() default true;
String[] exclude() default {};
String[] of() default {};
boolean callSuper() default false;
@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode
@NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。
构造器注解 作用于类上,用于生成构造函数(有staticName、access等属性) staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。
@NoArgsConstructor, 生成无参构造器
@RequiredArgsConstructor, 生成包含final和@NonNull注解的成员变量的构造器;
@AllArgsConstructor: 生成全参构造器
@Data:作用于类上,是以下注解的集合:
@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor
@Builder:作用于类上,将类转变为建造者模式
@Getter
@Setter
@Builder(toBuilder=true)
@ToString(callSuper=true,exclude = "birthDay")
@EqualsAndHashCode
public class BuilderBean extends BaseBean {
@NonNull
String name;
Integer age;
Date birthDay;
public static void main(String[] args) {
BuilderBean builderBean = BuilderBean.builder().name("liuli").age(10).birthDay(new Date()).build();
System.out.println(builderBean);
}
}
@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解
@Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象
@SneakyThrows:可以对受检异常进行捕捉并抛出
public class LomBokTest {
// 异常捕获
@SneakyThrows
public static void main(String[] args) {
File file = new File("d:\\test.txt");
//自动关闭 IO
@Cleanup InputStream inputStream = new FileInputStream(file);
@Cleanup InputStreamReader reader = new InputStreamReader(inputStream,"GBK");
@Cleanup BufferedReader br = new BufferedReader(reader);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
---- 编译后代码
public class LomBokTest {
public LomBokTest() {
}
public static void main(String[] args) {
try {
File file = new File("d:\\test.txt");
FileInputStream inputStream = new FileInputStream(file);
try {
InputStreamReader reader = new InputStreamReader(inputStream, "GBK");
try {
BufferedReader br = new BufferedReader(reader);
String line;
try {
while((line = br.readLine()) != null) {
System.out.println(line);
}
} finally {
if (Collections.singletonList(br).get(0) != null) {
br.close();
}
}
} finally {
if (Collections.singletonList(reader).get(0) != null) {
reader.close();
}
}
} finally {
if (Collections.singletonList(inputStream).get(0) != null) {
inputStream.close();
}
}
} catch (Exception var24) {
var24.printStackTrace();
}
}
}
@Synchronized:作用于方法级别,可以替换synchronize关键字或lock锁,用处不大
@Value 如果我们需要一个不可变的对象类,那么就用该注解。它在编译是自动添加Getter、toString()、equals()、hashCode()以及一个全参的构造器。