首页 > 编程语言 >Java学习路线:Lombok(二)Lombok实用注解1

Java学习路线:Lombok(二)Lombok实用注解1

时间:2024-10-27 16:52:22浏览次数:9  
标签:Java name default ToString 注解 Lombok public String

目录

@Getter和@Setter

@Accessors

@ToString 


前置知识:注解

以下是我整理的注解学习线路,按顺序学习完下列知识就可以无痛理解本篇了!

Java学习路线:JavaSE——注解-CSDN博客

Java学习路线:JavaSE——元注解-CSDN博客

Java学习路线:JavaSE——自定义注解-CSDN博客

@Getter和@Setter

作用:自动生成Get和Set方法

Getter注解的源代码如下:

package lombok;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Getter {
    AccessLevel value() default AccessLevel.PUBLIC;

    AnyAnnotation[] onMethod() default {};

    boolean lazy() default false;

    /** @deprecated */
    @Deprecated
    @Retention(RetentionPolicy.SOURCE)
    @Target({})
    public @interface AnyAnnotation {
    }
}

其中,

  • @Target指定 @Getter 注解可以应用于类和类的字段(成员变量)。也就是说,@Getter 可以为单个字段生成 get方法,或为整个类的所有字段生成 get 方法。
  • @Retention(RetentionPolicy.SOURCE)表示 @Getter是一个编译时注解,只保留在源码中,编译后会被丢弃,不会保留在.class 文件中。
  • value:value 用于指定生成的 getter 方法的访问级别,默认是 PUBLIC,即生成的 get方法默认是 public 访问级别。

Setter注解和Getter非常相似,就不再赘述了。

需要注意的是,静态(static)的字段上无法生成Getter和Setter,如果硬要标注,会生成静态的get和set方法。

另外,final类型的字段也不能生成Set方法。

@Accessors

作用:用来控制Getter和Setter的样式

源码如下:

@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.SOURCE)
public @interface Accessors {
    boolean fluent() default false;

    boolean chain() default false;

    boolean makeFinal() default false;

    String[] prefix() default {};
}

  • chain

chain 属性用于指定 setter 方法是否支持链式调用。链式调用的意思是,每个 setter 方法返回值不再是void,而是当前对象 this,从而可以进行连续调用。

例如:

@Accessors(chain = true)
private String name;

//生成的set方法
public MyClass setName(String name) {   // 生成的 setter 方法
    this.name = name;
//返回this
    return this;
}

//调用
MyClass obj = new MyClass()
                    .setName("John")
                        .setAge(25);
  • fluent

fluent 属性用于指定是否生成流式gettersetter 方法。如果设置为 true,生成的 gettersetter 方法不会以 getset 为前缀,而是直接使用字段名作为方法名

public void name(String name) {   // 生成的 setter 方法
    this.name = name;
}

public String name() {   // 生成的 getter 方法
    return this.name;
}
  • makeFinal

makeFinal 属性用于指定是否为生成的 gettersetter 方法中的字段添加 final 修饰符

@ToString 

添加@ToString注解后,编译后的javac文件中会多出一个toString方法:

public String toString() {
        return "student(name=" + this.getName() + ")";
    }

@ToString注解重写了Object类的toString方法,在调用该方法时会将对象的内容以上述格式打印:

student(name=allen)

 接下来介绍一下ToString注解的详细使用(不想了解就可以跳过了

ToString注解的源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface ToString {
    boolean includeFieldNames() default true;

    String[] exclude() default {};

    String[] of() default {};

    boolean callSuper() default false;

    boolean doNotUseGetters() default false;

    boolean onlyExplicitlyIncluded() default false;

    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Exclude {
    }

    @Target({ElementType.FIELD, ElementType.METHOD})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Include {
        int rank() default 0;

        String name() default "";
    }
}

  • includeFieldNames

将includeFieldNames设置为false的话,打印出的结果将不包含变量名:

student(allen)

  • exclude

exclude表示打印出的结果不包括指定的变量,比如

@ToString(exclude={"name"})

这样打印出的结果就不包含name变量

of也是同理,表示打印出的结果只包含指定变量

  • callSuper

设置为true时,ToString方法会自动调用父类的ToString方法(不咋常用)

  • doNotUseGetters

默认情况下,ToString的输出会调用get方法,即:

public String toString() {
        return "student(name=" + this.getName() + ")";
    }

而将doNotUseGetters设置为true后,会直接调用对象的属性:

public String toString() {
        return "student(name=" + this.name + ")";
    }

  • onlyExplicitlyIncluded

如果设置为true,则ToString方法会只输出类名,变成:

public String toString() {
        return "student()";
    }

  • Exclude和Include

是ToString的两个内部注解,调用方法为:

@ToString.Exclude

Exclude顾名思义,就是输出使不打印指定的元素

Include同理,输出时打印指定的元素,其中rank表示权重,rank越高打印的时候越靠前;name表示ToString方法打印时,等号前面的名字部分 

标签:Java,name,default,ToString,注解,Lombok,public,String
From: https://blog.csdn.net/LUwantAC/article/details/143093746

相关文章

  • JAVA学习笔记--方法篇
    一,形式参数和实际参数区别1.形式参数(形参):在定义方法的时候形式上定义的参数,此参数还没有值2.实际参数(实参):在调用方法的时候给形参赋予的具体的值publicclassDemo04method{publicstaticvoidmain(String[]args){intsum=sum(34,65);......
  • 使用Spring AI和LLM生成Java测试代码
    背景     AIDocumentLibraryChat项目已扩展至生成测试代码(Java代码已通过测试)。该项目可为公开的Github项目生成测试代码。只需提供要测试的类的网址,该类就会被加载、分析导入,项目中的依赖类也会被加载。这样,LLM就有机会在为测试生成模拟时考虑导入的源类。可以提供te......
  • Java学习十六—掌握注解:让编程更简单
    一、关于注解1.1简介Java注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。​初学者可以这样理解注解:想像代码具有生命,注解就是对于代码中某些鲜活个体的贴上去......
  • java+vue计算机毕设高校毕业生就业竞争力分析及应用【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及与深化,高校毕业生数量逐年增加,就业市场竞争日益激烈。在这一背景下,高校毕业生的就业竞争力成为了社会关注的焦点。面对多元化的就......
  • Java的引用是什么
    Java中的引用是一种关联,可以让我们通过引用操作或访问对象。Java有四种类型的引用:强引用、软引用、弱引用和虚引用,它们在对象的生命周期、垃圾回收等方面有着不同的作用。理解引用的特性对于写出优质的Java代码至关重要。强引用是最常见的引用。如果一个对象具有强引用,那么垃圾收......
  • (附项目源码)Java开发语言,springboot 校园羽毛球馆预约管理系统,计算机毕设程序开发+文案
    摘  要随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。校园羽毛球馆预约管理系统,主要的模块包括管理员;首页、网站管理(轮播图、场馆公告)人员管理(管理员、普通用户、教练用户)内容管理(体育新闻、新闻分类列表)模......
  • (附项目源码)Java开发语言,springboot 测评成绩统计及分析模块的设计与实现 39,计算机毕设
    摘 要测评成绩统计及分析模块是综合素质测评系统的设计与实现中的关键部分。通过该模块,可以对学生的各项测评成绩进行统计和分析,从而了解学生的综合素质水平。这对于高校和学生来说都具有重要的研究意义和实践价值。传统的考试成绩只能反映学生的学习能力,而综合素质测评系......
  • 基于java的智慧物业管理系统,计算机毕业设计源码 005,计算机程序开发定制
    摘 要随着信息化时代的蓬勃发展,小区业主对智能化.网络化的智能服务需求越来越大。如今的社区服务存在功能简单、灵活性较差等问题,难以满足社区业主多样化的住房需求。针对以上所说的问题.我们要将传统的小区改成“互联网+”的小区管理模式。本课题设计并开发了一个包含楼......
  • java计算机毕业设计大学生考勤管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着高校教育的不断发展,校园信息化建设日益完善。如今,校园内各种信息系统如成绩查询系统、教务管理系统等不断涌现,为师生的学习、生活、管理等带......
  • java计算机毕业设计IT企业绩效核算平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的飞速发展,IT企业在现代经济中的地位日益凸显。然而,IT企业的绩效管理却面临诸多挑战。在当前的IT企业环境中,员工工作性质多样,包括软......