java常用注解汇总,Lombok常用注解的使用总结

Lombok是什么?

一个在编译阶段修改增强Java类的工具,使用方式基于注解,常用于:

为Java POJO生成属性对应的getter,setter等

为Java POJO生成builder构造器模式的实现

为Java类自动添加其他重复性代码,比如日志记录的声明代码可以通过@Slf4j注解添加

项目中是否引入Lombok一直是个存在争议,它的主要优势在于消除Java类的部分臃肿代码,提高开发效率,降低代码维护成本;缺点是需要IDE插件支持,需要团队统一规范,另外某些注解生成的隐性实现可能导致问题跟踪调试困难。

不使用Lombok,IDE也可以自动生成getter,setter代码,但Lombok除了getter,setter还有@Builder和@SuperBuilder等非常实用的自动实现。比如你可以将一个POJO类转化为builder模式,如果你又有一个子类,子类的构造器还要继承自父类,写起来就费劲了。而通过Lombok只需要一个@SuperBuilder注解(v1.18.2+版本支持)。

如何引入Lombok

引入依赖,以gradle为例:

compile("org.projectlombok:lombok:1.18.4")

IDE中安装插件,以IDEA为例: Settings -> Plugins -> 搜索Lombok Plugin,点击安装

bVblpXG?w=726&h=449

IDEA中配置启用注解的处理: Enable annotation processing (不开启将导致编译错误)

bVblpYN?w=951&h=268

Lombok常见用法

在属性上添加的注解: @Getter、@Setter、@NonNull等:

示例代码:

public class Parent {

// get,set添加在指定属性上

@Getter @Setter private int id;

@Getter @Setter private String name;

}

在类上添加的注解:

- @Data 注解组合,含@Setter、@Getter、@RequiredArgsConstructor、@EqualsAndHashCode等注解

- 构造函数注解: @NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor

- 构造器builder注解: @Builder、@SuperBuilder

- 日志声明的注解: @Slf4j 等

示例代码:

@Data

public class Child extends Parent {

private String ext;

}

@Setter@Getter或@Data注解添加后可以通过new创建对象并调用getter,setter方法:

Child c1 = new Child();

c1.setId(1);

System.out.println(c1.getId());

Builder构造器模式与继承

构造模式的链式调用写起来很方便,自己实现构造模式要在POJO类中写较多代码,尤其是需要继承父类的builder时。

Lombok的@Builder注解可以方便的支持构造模式

示例代码:

@Builder

public class Child extends Parent {

private String ext;

}

调用方法:

Child c1 = Child.builder().ext("子类属性ext").build();

System.out.println(c1.getExt());

此例中的链式调用仅有ext()属性,即使给父类Parent也添加@Builder注解也依然不能链式调用id()和name(),自己去写builder的实现也是这样,类是继承的,但类中的builder并无继承关系,而实际开发场景中我们一般都需要让子类的builder继承父类builder的行为。

Lombok在v1.18.2版本中针对这个问题增加了@SuperBuilder注解,子类和父类中都添加@SuperBuilder注解,子类builder即可继承父类builder。

代码示例:

@SuperBuilder

public class Parent {

// get,set添加在指定属性上

@Getter @Setter private int id;

//如果需要让build出的对象属性使用默认值,需要添加@Builder.Default注解

@Builder.Default

@Getter @Setter private String name = "unknown";

}

@SuperBuilder

@Data

public class Child extends Parent {

private String ext;

}

调用示例:

Child c1 = Child.builder().id(1).name("名称").ext("子类属性ext").build();

System.out.println(c1.getId());

需要注意的是: 关于builder的继承,Lombok Plugin尚未更新支持@SuperBuilder,所以以上写法在IDE下还会提示编译错误,等更新吧,或者用稍微蹩脚一点的解决方案:Lombok’s @Builder annotation and inheritance

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值