record User(String name, int age){
public User {
callNumber++;
}
private static int callNumber;
static int getCallNumber(){
return callNumber;
}
}
调用:
var dur=new User("tea2",20);
var acs=new User("tea2",20);
System.out.println(User.getCallNumber());
Record的构造函数
构造函数可以写成两种方式.同时在构造函数中,进行各种验证操作.
在IDEA中可以通过快捷方式进行转换.如下图:
Java 14 Record简化构造函数转换为传统构造函数:
Java 14 Record简化构造函数转换为传统构造函数
Java 14 Record传统构造函数转换为简化构造函数:
Java 14 Record传统构造函数转换为简化构造函数
传统构造函数
record User(String name, int age){
public User(String name, int age) {
// 进行各种验证操作.
if(age<20){
throw new IllegalArgumentException("age小于20.");
}
callNumber++;
this.name = name;
this.age = age;
}
private static int callNumber;
static int getCallNumber(){
return callNumber;
}
}
简化构造函数
record User(String name, int age){
public User {
// 进行验证操作.
if(age<20){
throw new IllegalArgumentException("age小于20.");
}
callNumber++;
}
private static int callNumber;
static int getCallNumber(){
return callNumber;
}
}
在Record中使用泛型
可以这样定义泛型:
record MobilePhone(T phone,double price){
}
然后定义一个Record,定义一个普通类:
record HuaWei(){
private static final String name="Huawei";
private static final String model="mate 20 pro";
public String name(){
return name;
}
public String model(){
return model;
}
}
class XiaoMi{
private static final String name="Xiaomi";
private static final String model="9";
public String name(){
return name;
}
public String model(){
return model;
}
}
调用:
var huaWeiMobilePhone=new MobilePhone(new HuaWei(),6000);
var xiaomiMobilePhone=new MobilePhone(new XiaoMi(),6100);
System.out.println(huaWeiMobilePhone.phone().name());
System.out.println(xiaomiMobilePhone.phone().name());
System.out.println(huaWeiMobilePhone.toString());
System.out.println(xiaomiMobilePhone.toString());
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
package cn.bckf.java14demo;
final class User extends java.lang.Record implements java.io.Serializable {
private final java.lang.String name;
private final int age;
public User(java.lang.String name, int age) { /* compiled code */ }
public java.lang.String toString() { /* compiled code */ }
public final int hashCode() { /* compiled code */ }
public final boolean equals(java.lang.Object o) { /* compiled code */ }
public java.lang.String name() { /* compiled code */ }
public int age() { /* compiled code */ }
}