关注我,持续带来简单,实用的Java编程技巧。
在开发中,总需要写一些比较程式化的代码,比如:bean的get,set方法,toString方法等等。当一个类的属性很多时,写这些方法也挺麻烦的。当属性名修改后又需要把这些格式化的代码一并修改,还是有些麻烦。
这时就可以通过LomBok自动生成代码,不用我们自己写了。
Lombok介绍
- LomBok以注解的形式生成一些固定格式的代码,减少代码量。
- LomBok自动生成的代码是在编译阶段加入class文件中的,不会影响程序的运行速度。
Lombok的使用
以Maven环境为例,只需要引入依赖即可。若没有使用自动构建的框架,也只需要手动将jar包添加到项目路径即可。
- 引入依赖
pom文件代码片段,没有指定LomBok的版本,用的是SpringBoot默认配置的LomBok版本。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
PS:
true,代表不是必要的依赖。在项目打包时,如果有用到就会把jar包打包,没有用到就不会打包。
- var和val的使用
以var和val这两个声明变量用的关键字来理解下,LomBok动态添加代码的特性。
var和val都是LomBok提供的用来声明变量的关键字。Java的语法要求是声明变量一定要对应明确的类型,也就是说java是强类型的编程语言。
var和val用法是和java语法矛盾的,那它们又是如何工作的哪。先看下它们的用法,后面再详细讲解。
val、val 关键字可以让我们在定义一个变量时候不需要提前指定它的类型,它的实际的类型将由初始化的表达式推断:
- var 所声明的变量是非 final 的。
- val 所声明的变量是 final 的。
来看下下面这段代码:
package com.hyyj.practice.lombok;
import lombok.val;
import lombok.var;
import java.util.ArrayList;
/**
* Lombok 使用示例------var和val的使用
* val、val 关键字可以让我们在定义一个变量时候不需要提前指定它的类型,
* 它的实际的类型将由初始化的表达式推断
* var 所声明的变量是非 final 的。
* val 所声明的变量是 final 的。
* @author Wangjzh
* @date 2022/10/25 - 11:06
*/
public class VarTest {
public static void main(String[] args) {
//通过var定义变量strings
var strings=new ArrayList<String>();
strings.add("welcome to hyyj.com");
//通过var定义变量foo
val foo=strings.get(0);
//输出foo
System.out.println(foo);
}
}
输出结果:
"D:\Develop Tools\Java\jdk1.8.0_311\bin\java.exe" ...
welcome to hangge.com
从程序中可以看出var和val声明的变量是通过初始化来确定类型和具有那些特征。这有点像弱类型语言的用法,声明变量时不关心变量的类型,具体的类型在使用时确定。
来看下编译后的代码,可以看出编译是还是按实际类型来声明的变量。
package com.hyyj.practice.lombok;
import java.io.PrintStream;
import java.util.ArrayList;
public class VarTest
{
public static void main(String[] args)
{
ArrayList vars = new ArrayList();
vars.add("welcome to hangge.com");
String foo = (String)vars.get(0);
System.out.println(foo);
}
}
总结
- Lombok是从JDK1.6开始引入的。
- Lombok的初衷是为了简化格式化代码的开发,减少代码量。
- 以var和val的使用举例是为了简单直观的感受Lombok的功能特性,但var和val的用法实际上还是违背java的基本要求的,实际开发中不推荐这么用。
- 引入后可能会对看代码带来一些不明确,但多了解些Lombok的各种注解,其实并不算晦涩。
- 关注我,后面会带大家继续了解Lombok的其它标签。