当前位置:   article > 正文

Lombok简单使用教程_lombok.extern.slf4j.slf4j;

lombok.extern.slf4j.slf4j;

目录

Lombok简介

Lombok使用准备

在对应的IDE中安装Lombok插件

添加Lombok依赖

常用功能

示例

关于Lombok的一些陷阱

关于equal和hashcode的问题:

违反了封装的原则

依赖性很强



Lombok简介

Lombok可以在你开发时提供Lombok的相关注解,在运行时给你生成相应的代码。从而可以简化项目结构,同时提高项目开发的效率。

Lombok使用准备

在对应的IDE中安装Lombok插件

如果需要使用Lombok,你就必须安装你的Lombok插件,插件下载地址:https://projectlombok.org/download。这里可以下载到通用的Lombok插件安装工具。下载完后双击jar包会出现如下界面:

Lombok插件安装界面

选择你需要安装的ide安装或者卸载即可。

添加Lombok依赖

项目中添加Lombok依赖(maven为例):

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. </dependency>

常用功能

  1. @Getter,生成get方法
  2. @Setter,生成set方法
  3. @ToString,生成toString方法
  4. @EqualsAndHashCode,生成hashcode和equals方法
  5. @Slf4j,在类开头生成日志模板代码
  6. @Data 整合@Getter、@Setter、@ToString
  7. @NoArgsConstructor 无参数构造方法
  8. @AllArgsConstructor所有属性构造方法
  9. @RequiredArgsConstructor 必要属性构造方法(final属性)

示例

  1. import lombok.AllArgsConstructor;
  2. import lombok.Data;
  3. import lombok.EqualsAndHashCode;
  4. import lombok.RequiredArgsConstructor;
  5. import lombok.extern.slf4j.Slf4j;
  6. @Data
  7. @EqualsAndHashCode
  8. @AllArgsConstructor
  9. @RequiredArgsConstructor
  10. @Slf4j
  11. public class TestObj {
  12. private String name;
  13. private String mail;
  14. private final String sex;
  15. public static void main(String[] args) {
  16. TestObj t = new TestObj("1");
  17. t.setMail("123@123.com");
  18. t.setName("name");
  19. TestObj t1 = new TestObj("name", "123@123.com", "1");
  20. log.info(t.toString());
  21. log.info(t1.toString());
  22. log.info(String.valueOf(t.equals(t1)));
  23. log.info(t.getName());
  24. }
  25. }

上述代码是Lombok的简单示例,是不是挺简单呢。

上述代码运行结果:

  1. 16:58:03.891 [main] INFO com.test.web.TestObj - TestObj(name=name, mail=123@123.com, sex=1)
  2. 16:58:03.895 [main] INFO com.test.web.TestObj - TestObj(name=name, mail=123@123.com, sex=1)
  3. 16:58:03.895 [main] INFO com.test.web.TestObj - true
  4. 16:58:03.895 [main] INFO com.test.web.TestObj - name

当然更多Lombok的功能希望读本文的你可以自己去探索。

关于Lombok的一些陷阱

关于equal和hashcode的问题:

请参看如下例子:

Person.java

  1. import lombok.Getter;
  2. import lombok.Setter;
  3. @Getter
  4. @Setter
  5. public class Person {
  6. private String name;
  7. private String id;
  8. }

Worker.java

  1. import lombok.EqualsAndHashCode;
  2. import lombok.Getter;
  3. import lombok.Setter;
  4. @EqualsAndHashCode
  5. @Getter
  6. @Setter
  7. public class Worker extends Person {
  8. private String job;
  9. public static void main(String[] args) {
  10. Worker worker = new Worker();
  11. worker.setId("1");
  12. worker.setName("test1");
  13. worker.setJob("砖瓦匠");
  14. Worker worker2 = new Worker();
  15. worker2.setId("2");
  16. worker2.setName("test2");
  17. worker2.setJob("砖瓦匠");
  18. System.out.println(worker.equals(worker2));
  19. }
  20. }

上述结果返回的是true,显然,worker和worker2不属于一个人,所以这里是有问题的,在新版本的ide中,会有个警告的提示:

Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.

意思是默认情况下,Lombok会认为你只比较当前类的属性,所以你需要添加属性:callSuper = true,但@Data并无此属性,所以慎用@Data。

具体的代码为:

@EqualsAndHashCode(callSuper = true)

所以个人其实不太建议使用Lombok的@Data注解和@EqualsAndHashCode注解。

违反了封装的原则

对于Lombok,如果生成了get与set方法,会把对象下的所有属性都生成对应的方法,这样如果有些属性你并不希望外界获取,就无法满足。最常见的一种设计就是类似集合,通常我们都会用一个add方法来添加元素,这样在其他类调用我的时候就只能做新增操作。如果其他类获取了我的list就可以做清空等操作,亦或者是你不希望外部去设置你这个属性的值(这种场景建议使用final属性,但设置成final属性又会生成对应的参数构造方法,也不是一个好的解决方案),Lombok同样会生成对应的set方法。示例代码如下:

  1. package com.buss.data.bean;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import lombok.Getter;
  5. import lombok.Setter;
  6. @Getter
  7. @Setter
  8. public class Worker extends Person {
  9. private String job;
  10. public List<String> hobbies = new ArrayList<String>();
  11. public void addHobby(String hobby) {
  12. this.hobbies.add(hobby);
  13. }
  14. public static void main(String[] args) {
  15. Worker worker = new Worker();
  16. worker.addHobby("swing");
  17. worker.getHobbies().clear();
  18. System.out.println(worker.getHobbies());
  19. }
  20. }

如果你不希望出现这样的情况,那么Lombok可能对你来说不是一个好的选择。总的来说便利就会带来一些东西无法定制化。所以这些情况需要酌情考虑。

依赖性很强

如果项目使用了Lombok,那么你的项目成员的IDE都是必须安装Lombok插件的,这样其实是一种强侵入性的做法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/650744
推荐阅读
相关标签
  

闽ICP备14008679号