Java中Lombok常用注解分享

作者:冷小风的IT生活 时间:2023-06-13 01:32:48 

以前的Java项目中充斥了太多不友好的代码:POJO的Getter/Setter/toString等等,这些代码由于没有什么技术含量,影响了代码的美观等缺点,让Lombok应运而生。

Our-task介绍

本篇博客是我的github上项目our-task:一个完整的清单管理系统的配套教程文档,大家感兴趣的话,可以去看看

安装Lombok

加入Maven依赖

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>

IDEA中安装Lombok插件

依次点击:FIle-Settings-Plugins,从插件栏中搜索Lombok进行安装,安装之后勾选Lombok启动即可。

注解介绍

@Getter和@Setter

放在类上,为该类的所有属性自动生成Getter和Setter方法

import lombok.Getter;
import lombok.Setter;

/**
* @program: our-task
* @description: 学生类
* @author: water76016
* @create: 2020-12-15 10:57
**/
@Getter
@Setter
public class Student {
   int id;
   String name;
   int age;
}

@ToString

自动重写toString方法,和我们平时使用IDEA编辑器自动生成的一样

/**
* @program: our-task
* @description: 学生类
* @author: water76016
* @create: 2020-12-15 10:57
**/
@ToString
public class Student {
   int id;
   String name;
   int age;
}

@EqualsAndHashCode

自动生成equal(Object other)和hashCode()方法,如果某些变量不想要加入该注解,可以使用exclude进行排除

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Student {
   int id;
   String name;
   int age;
}
import lombok.EqualsAndHashCode;

//把name属性排除在外
@EqualsAndHashCode(exclude = "name")
public class Student {
   int id;
   String name;
   int age;
}

问:为什么把生成equal(Object other)和hashCode()方法弄成一个注解,而不是分开使用?

答:在Java中有规定:当两个对象相等时,它们的hashcode是一定相等的。但是,当两个对象的hashcode相同,对象不一定相等。这样做是为了防止违反Java规定的情况发生。

@NoArgsConstructor

生成一个不包含任何参数的无参构造器

import lombok.NoArgsConstructor;

@NoArgsConstructor
public class Student {
   int id;
   String name;
   int age;
}

@AllArgsConstructor

生成一个包含所有参数的构造器

import lombok.AllArgsConstructor;

@AllArgsConstructor
public class Student {
   int id;
   String name;
   int age;
}

@RequiredArgsConstructor

为&ldquo;特定参数&rdquo;生成构造器,这里的&ldquo;特定参数&rdquo;,特指那些加上final修饰词的属性

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class Student {
   int id;
   final String name;
   int age;

public static void main(String[] args) {
       Student student = new Student("33");
   }
}

这里我们只为name加上final修饰,可以发现,我们只生成了一个包含name属性的构造器。另外,如果所有的属性都没有final修饰的话,使用@RequiredArgsConstructor会生成一个无参的构造器。

@Data

这是一个组合注解,加了这个注解,相当于加入了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这五个注解。

@Value

这也是一个组合注解,但是会把所有的变量都设置为final的,其他的就和@Data一样了。等同于加入了@Getter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这四个注解(由于所有属性是final的,所以没有@setter注解了)。

@Builder

流式的set值写法,不过毕竟是给属性赋值,基本的setter还是需要有的,一般来说,@Builder会和@Data一起使用。

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class Student {
   int id;
   String name;
   int age;

public static void main(String[] args) {
   Student student =                           Student.builder().id(1).name("water").age(18).build();
   }
}

@Slf4j

自动生成该类的log静态常量,就可以直接打印日志了,不用去new一个log的静态常量了。

@Slf4j
public class Student {
   int id;
   String name;
   int age;

public static void main(String[] args) {
       log.info("hello world");
   }
}

来源:https://juejin.cn/post/7224145268738949179

标签:Java,Lombok,注解
0
投稿

猜你喜欢

  • java数据结构之希尔排序

    2023-11-08 18:16:18
  • android dialog背景模糊化效果实现方法

    2023-09-17 02:31:23
  • mybatis注入Date日期值为null的解决方法

    2021-12-08 01:49:17
  • 浅谈对象数组或list排序及Collections排序原理

    2021-10-18 08:35:31
  • C#中的位操作小结

    2023-08-07 07:01:29
  • java 格式化输出数字的方法

    2022-11-10 05:04:07
  • Java基于Tcp协议的socket编程实例

    2022-03-08 00:04:13
  • Maven学习----Maven安装与环境变量配置教程

    2021-12-04 08:20:25
  • Android实现未读消息小红点显示实例

    2022-05-18 07:57:27
  • Java安全框架——Shiro的使用详解(附springboot整合Shiro的demo)

    2022-05-29 09:46:46
  • Flutter TV Android端开发技巧详细教程

    2021-09-16 20:32:18
  • Java设计模式之观察者模式_动力节点Java学院整理

    2022-01-14 12:27:47
  • android 点击EditText始终不弹出软件键盘实现代码

    2022-05-23 06:37:19
  • 深入委托与多播委托的详解

    2023-05-29 07:07:15
  • C#用委托BeginInvoke做异步线程

    2023-04-22 07:23:05
  • Java重写与重载之间的区别

    2021-06-30 03:16:13
  • Springboot深入讲解nocos的整合与使用

    2022-06-05 05:11:27
  • Android Studio 多层级 Module 对 aar 引用问题解决方法

    2023-08-06 19:41:27
  • MyBatis Plus 入门使用详细教程

    2023-08-23 05:48:33
  • Java实现输出数字三角形实例代码

    2023-08-25 02:09:51
  • asp之家 软件编程 m.aspxhome.com