从18年开始了解到java就用的就是jdk8,经历了两家公司,也都是JDK8的项目,这是故步自封还是稳中求胜呢,对于商业项目来讲需要考虑到的地方太多了,更新的价值点和风险点 ,最终的结果导向还是价值,升级后对于我们现在到底能带来多少送价值。但是对于我个人来讲我不去学习新的东西,那必然是故步自封了。
给你一个保守、粗暴的估计,你如果从 JDK 8 迁移到 JDK 17,并且能够恰当使用 JDK 8 以后的新特性的话,产品的代码量可以减少 20%,代码错误可以减少 20%,产品性能可以提高 20%,维护成本可以降低 20%。这些,都是实实在在的收益。拥抱 Java 新特性,掌握主动权------- 范学雷 (Oracle 首席软件工程师)
equals
和访问器。人们普遍抱怨“Java 太冗长”或“仪式太多”。一些最严重的违规者是那些只不过是少数值的不可变 数据载体的类。正确编写这样一个数据载体类涉及许多低价值、重复、容易出错的代码:构造函数、访问器equals
、hashCode
、toString
、 等。
设计一个圆形的对象:
package com.yuanxindong.study.record;
public final class Circle implements Shape {
public final double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
设计一个方形的对象:
package com.yuanxindong.study.record;
public final class Square implements Shape {
public final double side;
public Square(double side) {
this.side = side;
}
@Override
public double area() {
return side * side;
}
}
本着DRY原则(dont repeat yourself),我们是否可以进一步抽象,和简化代码呢?当你看到的时候会不会想到枚举类呢?
那这个时候record类就来了:
package com.yuanxindong.study.record;
public record Circle(double radius) implements Shape {
@Override
public double area() {
return Math.PI * radius * radius;
}
}
可以发现我们不用,声明成员变量,也不需要构造方法了,就是多了一个类上面多了一个入参,并且其中档案类内置了缺省的 equals 方法、hashCode 方法以及 toString 方法的实现。一般情况下,我们就再也不用担心这三个方法的重载问题了。这不仅减少了代码数量,提高了编码的效率;还减少了编码错误,提高了产品的质量。
在上文的代码中我们已经看到了record类的声明和使用,这里就不再赘述
在上面我们也有提到过档案类内置了下面的这些方法缺省(默认)实现:
透明载体的意思,通俗地说,就是档案类承载有缺省实现的方法,这些方法可以直接使用,也可以替换。