以前我们定义类都是用class
关键词,但从Java 16开始,我们将多一个关键词record
,它也可以用来定义类。record
关键词的引入,主要是为了提供一种更为简洁、紧凑的final
类的定义方式。
下面就来具体了解record类的细节。配套视频教程:Java 16 新特性:使用record声明类
声明record类
声明record类的基础语法:
record range(int start, int end){}
我们知道class类可以在单独文件中生命,也可以在其他类中申明。那么record类也一样,它有这几种申明方式:
- 单独文件申明:
public record range(int start, int end){}
- 在类内部申明:
public class DidispaceTest {
public record range(int start, int end){}
}
- 函数内申明:
public class DidispaceTest {
public void test() {
public record range(int start, int end){}
}
}
record类详解 在知道了如何申明之后,你一定会想用
record
申明的就那么点元素,它到底会具备什么能力呢?因为
record
关键词申明类主要是为了简化一些类的申明,所以它本质就是一类特殊的class,或者说是某一个模版的class。record
申明的类,具备这些特点:- 它是一个
final
类 - 自动实现
equals
、hashCode
、toString
函数 - 成员变量均为
public
属性
public final class range{
final int start;
final int end;
public range(int start, int end) {
this.start = start;
this.end = end;
}@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
range range = (range) o;
return start == range.start && end == range.end;
}@Override
public int hashCode() {
return Objects.hash(start, end);
}@Override
public String toString() {
return "range{" +
"start=" + x +
", end=" + y +
'}';
}public int start(){
return start;
}public int end(){
return end;
}
}
因为一些函数是隐藏的,在range定义的时候,我们看不到,所以我们可以尝试写这样一段测试代码来验证一下:
@Test
public void test() {
range r = new range(100, 200);
log.info(r.toString());
range r2 = new range(100, 200);
log.info(String.valueOf(r.equals(r2)));
}
定义成员函数 因为
record
申明的本质也是类,那么定义成员函数肯定也是可以的。比如,我们可以这样在
record
类中定义成员函数:record range(int start, int end){
int distance(){
return end - start;
}
}
【Java 16 新特性(record类)】然后,就可以这样调用它:
range r = new range(100, 200);
r.distance();
如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我,持续更新Java新特性专栏!
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
推荐阅读
- Java 14中对switch的增强,终于可以不写break了
- Java 17中对switch的模式匹配增强
- 详解 Java 17 中新推出的密封类
- Java 16 新特性(instanceof增强)
- Java 15 新特性(文本块)
- Java 18 新增@snipppet标签,注释中写样例代码更舒适了!
- 换Macbook M1芯片之后,IDEA很卡是怎么回事()
- java设计模式
- IDEA小技巧(Markdown里的命令行可以直接运行了)