NET2Java之八:Lombok

用习惯了.NET里的get、set访问器之后,再使用java,体验感简直臃肿不堪,在“卷”时代,什么最重要?效率,效率就是第一生产力,所以为什么不使用lombok呢,它可以在编译期自动生成getter、setter、toString()之类的代码,而你需要做的仅是简单的加几行注解而已。

Maven依赖

官网:https://projectlombok.org/

    <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
posted @ 2024-04-30 11:13  古法编程  阅读(47)  评论(0)    收藏  举报