NET2Java之八:Lombok
用习惯了.NET里的get、set访问器之后,再使用java,体验感简直臃肿不堪,在“卷”时代,什么最重要?效率,效率就是第一生产力,所以为什么不使用lombok呢,它可以在编译期自动生成getter、setter、toString()之类的代码,而你需要做的仅是简单的加几行注解而已。
Maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
使用示例
依旧是先定义一个User类
public class User {
private String name;
private int age;
private LocalDateTime time;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
}
在使用了lombok后,则代码可以简化为:
@Data
public class User {
private String name;
private int age;
private LocalDateTime time;
}
在使用时,你依旧可以通过user.getTime()来获取User的相关属性,和原生的getter/setter几乎没有差别。
Lombok的使用,主要依赖注解,注解的文档请参见:https://projectlombok.org/features/
- @Data:为所有字段添加@ToString、@EqualsAndHashCode、@Getter方法,为非final字段添加@Setter和@RequiredArgsConstructor
- @Getter/@Setter:类似.net中的get/set访问器,有时候我们还可以通过
@Setter(AccessLevel.NONE)注解来排除某个getter/setter访问器,如:
@Data
public class User {
private String name;
private int age;
@Setter(AccessLevel.NONE)
private LocalDateTime time;
}
-
@var、@val:var就类似于.net里的var,表示变量;val则类似于var+const,表示常量
-
@Builder:为类生成复杂的构建器API,如:
@Data
@Builder
public class User {
private String name;
private int age;
private LocalDateTime time;
}
则可以通过User user = User.builder().age(1).name("张三").build();来实例化。
- @Cleanup:局部变量声明,在代码块执行完之前自动清理给定的资源,比如:
public class App {
public static void main(String[] args) {
try {
@Cleanup
FileInputStream fi=new FileInputStream("");
} catch (Exception e) {
e.printStackTrace();
}
}
会在FileInputStream执行完之后,自动调用close()。虽然lombok还有很多强大功能,但我个人在使用上偏向保守,毕竟是自动生成,线上环境又较为复杂,很有可能引出不必要的麻烦。
Jackson使用lombok
lombok用起来是香,但是jackson序列化的时候就遇见问题了,不支持,这个时候就需要lombok使用高一些的版本:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
</dependency>
如果使用了lombok那么json序列化的时候可能会出问题,这个时候就需要引入@Jacksonized属性:
@Data
@Builder
@Jacksonized
@JsonIgnoreProperties(ignoreUnknown = true)
public class User

浙公网安备 33010602011771号