目录
0、有用的新特性
一、Record
1.1、Record的介绍
1.2、Record的声明
1.3、Record的创建
0、有用的新特性
JDK8-19 新增了不少新特性,这里我们把实际常用的新特性,给大家介绍一下,包括以下几个方面:
- Java Record
- Swich 开关表达式
- Text Block 文本块
- var 声明局部变量
- sealed 密封类
一、Record
1.1、Record的介绍
Java14 中预览的新特性叫做 Record,在 Java 中,Record 是一种特殊类型的 Java 类。可用来创建不可变类,例如这个类中的属性值,一经赋值后不可再改变了。
任何时候创建 Java 类,都会创建大量的样板(样例)代码,我们可能会使用Lombok简化:
- 每个字段的 set,get 方法
- 公共的构造方法
- 重写 hashCode, toString(), equals()方法
Lombok是通过插件和预编译的方式实现的,不是语言级别的,而Record是语言级别的Lombok,可以使用Record代替Lombok, 简化样例代码的编写、简化开发,如下特点:
- 带有全部参数的构造方法
- public 访问器:属性的访问是通过公共的方法
- 在编译Record过程中,会生成toString(),hashCode(),equals()等方法
- 没有遵循 Bean 的命名规范,无 set,get 方法
- 类以及所有的属性都是final修饰的, Record不能被继承,Record 为隐士的 final 类。除此之外与普通类一样
- 不可变类,不能被继承,通过构造创建 Record
- final 属性,能读它的属性,但是不可修改
- 不能声明实例属性,能声明 static 静态成员
1.2、Record的声明
Record是JDK14的特性,所以你的jdk语言级别必须是14以上,否则就没有Record选项:
现在就有了:
Record是用来作为数据的载体,存储数据用的,创建方式如下:
public record Student(Integer id,String name,String email,Integer age) {
//1、小括号里面是它的构造方法
//2、使用record关键字,代表Student它是一个record类型
//3、不需要做其它的任何操作,record类型就创建好了,包含四个属性
}
1、小括号里面是它的构造方法
2、使用record关键字,代表Student它是一个record类型
3、不需要做其它的任何操作,record类型就创建好了,包含四个属性
我们现在来单元测试一下,alt+回车:
1.3、Record的创建
创建Record对象和创建普通的java对象一模一样:
public class StudentTest {
@Test
public void testRecord() {
Student lisi = new Student(1001,"lisi","lisi@qq.com",20);
//Student[id=1001, name=lisi, email=lisi@qq.com, age=20]
System.out.println(lisi);
}
}
现在lisi这个对象,他的四个属性是固定好的了,只能读取,无法修改!现在我如何来读取他的四个属性呢,注意:
1、Record类型没有遵循Java Bean 的命名规范,无 set,get 方法,我们通过Public访问器来获取属性值;
2、因为没有set方法,所以通过Record创建的对象,属性值是不可变的,这样Record对象在使用上也就更加安全;
3、Record重写了hashCode, toString(), equals()方法,例如你输出lisi,其实是调用的lisi.toString()方法;
public class StudentTest {
@Test
public void testRecord() {
Student lisi = new Student(1001,"lisi","lisi@qq.com",20);
//Student[id=1001, name=lisi, email=lisi@qq.com, age=20]
System.out.println(lisi);
//无set、get方法,通过Public访问器来获取属性值,这些都是公共的方法:
Integer id = lisi.id();
String name = lisi.name();
System.out.println("id =" + id);
System.out.println("name =" + name);
}
}