我们为什么需要get()与set()方法、Lombok注解生成?
Java的三大特性:《封装、继承、多态》中的“封装”,介绍起来比较简单,但哪个应用实例最能体现封装呢?我觉得private属性与get()与set()方法的结构,最能体现Java的封装特性。
而每次都手动写get()与set()方法太麻烦,所以我们需要用用lombok注解偷偷懒。
get()与set()方法
封装就是,需要让使用者知道的部分暴露出来,不需要使用者知道的都隐藏起来。
那这句话,具体怎么实现呢?get()与set()方法就是一个很好的例子。
我们将类的属性,用private修饰,控制外界的访问权限。再提供外界可以访问的get()与set()方法,让我们通过我们封装好的方法来访问我们类里的属性,提高安全性,降低耦合性。
来个例子:
class Student {
private Integer id; // 学生编号,学号
private String name; // 学生姓名
private Integer age; // 学生年龄
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) { // 可以在get()与set()方法中进行逻辑判断,保证数据的安全
if (age > 0 && age < 150) {
this.age = age;
} else {
System.out.println("年龄有误!");
}
}
}
public class Test {
public static void main(String[] args) {
Student student1 = new Student();
student1.setId(1); //由于属性都是private的,只能通过提供的set()方法赋值
student1.setName("小猪");
student1.setAge(18);
System.out.println("ID:"+student1.getId()); // 只能通过提供的get()方法取值
System.out.println("NAME:"+student1.getName());
System.out.println("AGE:"+student1.getAge());
}
}
-----------------------------------------------------
输出结果:
ID:1
NAME:小猪
AGE:18
在Eclipse中,提供了快捷的get()和set()方法生成功能:
在属性定义完成后,在属性下方空白行右键,选择Source -> Generate Getters and Setters:
然后勾选,想要生成的属性名,及方法:
自动生成只会生成最基本的方法,可以生成完后再进行个性化修改。当然,生成属性不多时,你想手写也行。(我以前Java很弱,不知道这个快捷方法,真就手写了两年的get()与set()方法)
Lombok注解生成
Lombok 是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。
第一步.想要使用Lombok,首先当然是去下载啦。下载lombok.jar:https://projectlombok.org/download
Lombok官方地址: https://projectlombok.org/
github地址: https://github.com/rzwitserloot/lombok
第二步.运行lombok.jar。在lombok.jar 的目录下,运行:java -jar lombok.jar
注意,如果没有自动选择到你的Eclipse,则点击Specify location自己选择Eclipse路径。然后再进行安装。
安装完成后,可在eclipse根目录下,查看eclipse.ini文件,是否有了lombok的配置。
第三步,重启eclipse,并clean project。然后将lombok.jar导入工程,并Build Path。
再进行编程时,则可以直接在类前使用@Getter @Setter,表示生成get()与set()方法。
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
class Student {
private Integer id; // 学生编号,学号
private String name; // 学生姓名
private Integer age; // 学生年龄
}
当然,Lombok的功能不止这一个,我copy了一段关于lombok常用注解的说明:
@val @var
弱类型定义变量;val注解变量申明是final类型,var注解变量是非final类型
@NonNull
在方法或构造函数的参数上使用@NonNull,lombok将生成一个空值检查语句
@Getter @Setter @Accessors
给类增加 Get 和 Set 方法,使用 @Accessors 注解可以让set方法返回类本身,从而实现链式风格编程
@ToString
给类增加 toString 方法
@EqualsAndHashCode
给类增加equals和hashCode方法
@NoArgsConstructor
给类增加无参构造器
@RequiredArgsConstructor
给类增加指定参数的构造器
@AllArgsConstructor
给类增加包含所有参数的构造器
@Data
等同于 @ToString + @EqualsAndHashCode + @Getter + @Setter + @RequiredArgsConstructor
@Value
提供final变量的 @Getter
@Builder
提供建筑者模式
@SneakyThrows
转换checked异常为unchecked异常
@Synchronized
类似 Synchronized 关键字,但是可以隐藏同步锁 (会生成一个内部final对象,锁会加这个内部变量,而不是类本身)
@Log @Slf4j @CommonsLog
生成各种log对象