整理一下项目中常用的lombok注解:
@Getter
加在类上,可以自动生成参数的getter方法
@Setter
加在类上,可以自动生成参数的setter方法
@ToString
加在类上,调用toString()方法,可以输出实体类中所有属性的值
@RequiredArgsConstructor
会生成一个包含常量,和标识了NotNull的变量的构造方法。生成的构造方法是私有的private。这个我用的很少
@EqualsAndHashCode
- 它会生成equals和hashCode方法
- 默认使用非静态的属性
- 可以通过exclude参数排除不需要生成的属性
- 可以通过of参数来指定需要生成的属性
- 它默认不调用父类的方法,只使用本类定义的属性进行操作,可以使用callSuper=true来解决,会在@Data中进行讲解
@Data
这个是非常常用的注解,这个注解其实是五个注解的合体:
解决@EqualsAndHashCode有两种方法:
方法一:使用@Getter、@Setter、@ToString以及自定义equals和hashcode方法来替换@Data
方法二:在使用@Data的时候同时使用@EqualsAndHashCode(callSuper=true)
测试一下:
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class Test01 extends Test02{
private String id ;
}
import lombok.Data;
@Data
public class Test02 {
private String uuid;
}
public class TestMain {
public static void main(String[] args) {
Test01 test01 = new Test01();
Test01 test02= new Test01();
test01.setId("1");
test01.setUuid("1");
test02.setId("1");
test02.setUuid("2");
System.out.println(test01.hashCode() == test02.hashCode());//重写了hashcode所以值是相等的,这里有点小尴尬
System.out.println(test01.equals(test02));//这个比较的是内容,在这里就更尴尬了
//比较的是对象的地址,这个是没有问题的
System.out.println(test01 == test02);
}
}
没用加@EqualsAndHashCode(callSuper = true):
加了之后:
是不是很是神奇,原因:
@EqualsAndHashCode默认不继承父类,也就是重写equals和hashcode的时候不包含父类的字段,这就很坑,比较的是自己的字段
@Slf4j
这个就是打日志的,直接使用log.info()
其他输出日志的方式:
整理
@NoArgsConstructor
生成一个无参数的构造方法
@AllArgsConstructor
生成一个包含所有变量的构造方法
@Value
这个注解要和Spring的@Value注解区分,Spring的是从配置文件读取内容,这个注解是在类中的所有字段默认全部声明为private final类型,只会生成Getter方法,不会生成Setter方法,这个东东我没使用过(●’◡’●)
@Cleanup
这个注解就比较好玩了,主要用于关闭资源使用,这里简单写一下
没使用之前:
public static void main(String[] args) throws IOException {
InputStream inputStream = null;
try {
inputStream = new FileInputStream("D:...");
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
inputStream.close();
}
}
使用之后:
public static void main(String[] args) throws IOException {
@Cleanup InputStream inputStream = new FileInputStream("D:...");
}
是不是方便了很多,(●ˇ∀ˇ●)
其他的注解很少使用就不列举了。