赞
踩
目录
Lombok可以在你开发时提供Lombok的相关注解,在运行时给你生成相应的代码。从而可以简化项目结构,同时提高项目开发的效率。
如果需要使用Lombok,你就必须安装你的Lombok插件,插件下载地址:https://projectlombok.org/download。这里可以下载到通用的Lombok插件安装工具。下载完后双击jar包会出现如下界面:
选择你需要安装的ide安装或者卸载即可。
项目中添加Lombok依赖(maven为例):
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.EqualsAndHashCode;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
-
- @Data
- @EqualsAndHashCode
- @AllArgsConstructor
- @RequiredArgsConstructor
- @Slf4j
- public class TestObj {
-
- private String name;
-
- private String mail;
-
- private final String sex;
-
- public static void main(String[] args) {
- TestObj t = new TestObj("1");
- t.setMail("123@123.com");
- t.setName("name");
- TestObj t1 = new TestObj("name", "123@123.com", "1");
-
- log.info(t.toString());
- log.info(t1.toString());
- log.info(String.valueOf(t.equals(t1)));
- log.info(t.getName());
- }
- }
上述代码是Lombok的简单示例,是不是挺简单呢。
上述代码运行结果:
- 16:58:03.891 [main] INFO com.test.web.TestObj - TestObj(name=name, mail=123@123.com, sex=1)
- 16:58:03.895 [main] INFO com.test.web.TestObj - TestObj(name=name, mail=123@123.com, sex=1)
- 16:58:03.895 [main] INFO com.test.web.TestObj - true
- 16:58:03.895 [main] INFO com.test.web.TestObj - name
当然更多Lombok的功能希望读本文的你可以自己去探索。
请参看如下例子:
Person.java
- import lombok.Getter;
- import lombok.Setter;
-
- @Getter
- @Setter
- public class Person {
-
- private String name;
- private String id;
- }
Worker.java
- import lombok.EqualsAndHashCode;
- import lombok.Getter;
- import lombok.Setter;
-
- @EqualsAndHashCode
- @Getter
- @Setter
- public class Worker extends Person {
-
- private String job;
-
- public static void main(String[] args) {
- Worker worker = new Worker();
- worker.setId("1");
- worker.setName("test1");
- worker.setJob("砖瓦匠");
-
- Worker worker2 = new Worker();
- worker2.setId("2");
- worker2.setName("test2");
- worker2.setJob("砖瓦匠");
- System.out.println(worker.equals(worker2));
- }
- }
上述结果返回的是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方法。示例代码如下:
- package com.buss.data.bean;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import lombok.Getter;
- import lombok.Setter;
-
- @Getter
- @Setter
- public class Worker extends Person {
-
- private String job;
-
- public List<String> hobbies = new ArrayList<String>();
-
- public void addHobby(String hobby) {
- this.hobbies.add(hobby);
- }
-
- public static void main(String[] args) {
- Worker worker = new Worker();
- worker.addHobby("swing");
- worker.getHobbies().clear();
-
- System.out.println(worker.getHobbies());
- }
- }
如果你不希望出现这样的情况,那么Lombok可能对你来说不是一个好的选择。总的来说便利就会带来一些东西无法定制化。所以这些情况需要酌情考虑。
如果项目使用了Lombok,那么你的项目成员的IDE都是必须安装Lombok插件的,这样其实是一种强侵入性的做法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。