1.Recode记录
(1). 前言
- Recode是一种特殊的类,在java1.4时被引入.
- 其出现的原因是我们在编写JavaBean代码时我们会写出很多繁冗的代码(诸如getter/setter方法,重载的构造器,重写的hashCode()等等),为了解决这个问题,引入了Recode记录.
(2). 例 :
在引入记录前 :
public class Employee {int age;String name;public Employee() {System.out.println("调用了空参构造器");}public Employee(int age, String name) {System.out.println("调用了有两个参数的构造器");this.age = age;this.name = name;}public Employee(int age) {System.out.println("调用了一个参数构造器");this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Employee employee = (Employee) o;return age == employee.age && Objects.equals(name, employee.name);}@Overridepublic int hashCode() {return Objects.hash(age, name);}@Overridepublic String toString() {return "Employee{" +"age=" + age +", name='" + name + '\'' +'}';}
}
在引入Recode后 :
public record Emp(int age, String name) {
}
Recode提供了构造器public Emp(int age, String name), getter()方法(注意没有setter()方法)等.
Test :
class RecodeTest{public static void main(String[] args) {Emp e = new Emp(20, "hexua");//默认调用e对象的重写的toString方法System.out.println(e);//获取age :System.out.println("年龄是" + e.age());//获取name :System.out.println("名字是" + e.age());}
}控制台 :
Emp[age=20, name=hexua]
年龄是20
名字是20
注 :
- 不能显式继承其他类.
- JavaBean是可变的,而recode是不可变的.所以不可以用recode来替代JavaBean的功能.
2.密封类(sealed关键字)
密封类是java17中引入的一个新特性,用于限制类的继承.密封类可以防止其他类继承它们.从而确保更好的类型安全性和性能.
例 :
//sealed修饰表明该类是密封类, permits指定了由哪些类来继承
sealed class Class1 permits Class2, Class3{}
//Class2继承了Class1, 必须对Class1的子类进行限制, 选择其子类是由sealed修饰, 还是final, non-sealed
final class Class2 extends Class1{}
non-sealed class Class3 extends Class1 {}
注 :
- 密封类可以permits指定可以由哪些类来继承该密封类.permits指定后,其子类必须显式extends继承该密封类.且其子类需要选择声明为sealed/non-sealed/final.
- 如果其子类声明为sealed,则其子类也为密封类,可以指定由哪些类继承.
- 如果其子类声明为final,说明该子类不能被继承.
- 如果其子类声明为non-sealed,则该子类并无限制,与普通的类无异.