当前位置: 首页 > 科技观察

JDK16GA正式发布:17大特性,一气呵成,可能是东半球最快的解读!

时间:2023-03-13 18:30:28 科技观察

就在昨天,JDK16GA正式发布:2020/12/10RampdownPhaseOne(forkfrommainline)2021/01/14RampdownPhaseTwo2021/02/04InitialReleaseCandidate2021/02/18FinalReleaseCandidate2021/03/16GeneralAvailability官方给出的所有JDK16特性列表如下,一共17个特性:338:VectorAPI(孵化器)347:启用C++14语言特性357:MigratefromMercurialtoGit369:迁移到GitHub376:ZGC:并发线程堆栈处理380:Unix域套接字通道386:AlpineLinux端口387:弹性元空间388:Windows/AArch64端口389:外部链接器API(孵化器)390:价值警告-BasedClasses392:打包工具393:Foreign-MemoryAccessAPI(第三孵化器)394:instanceof的模式匹配395:记录396:默认强封装JDK内部397:密封类(第二预览)一。338:VectorAPIJava提供了一些VectorAPI,那么VectorAPI到底是什么?话不多说,我举个例子。我们先写一段普通的Java代码:voidscalarComputation(float[]a,float[]b,float[]c){for(inti=0;iSPECIES=FloatVector.SPECIES_256;voidvectorComputation(float[]a,float[]b,float[]c){for(inti=0;i5){flag=s.contains("jdk");}395:记录很多人抱怨Java太冗余,很多人代码过于形式化。比如如下代码所示,除了x和y的属性定义外,其他构造方法,equals,hashCode,toString方法基本都是借助IDE工具生成的:classPoint{privatefinalintx;privatefinalinty;Point(intx,inty){这个。x=x;this.y=y;}intx(){returnx;}inty(){returny;}publicbooleanequals(Objecto){if(!(oinstanceofPoint))returnfalse;Pointother=(Point)o;returnother。x==x&&other.y==y;}publicinthashCode(){returnObjects.hash(x,y);}publicStringtoString(){returnString.format("Point[x=%d,y=%d]",x,y);}}所以Java发明了一个新的Java类,我们只需要简单的几行代码。有点类似lombok给我们代码带来的简洁:recordPoint(intx,inty){}397:SealedClasses中文翻译就是密封类,具体是什么意思?举个栗子,如下代码所示,Expr接口被sealed修饰,所以只有permits后面的实现类实现了这个接口,其他实现类是不允许的:packagecom.example.expression;publicsealedinterfaceExprpermitsConstantExpr,PlusExpr,TimesExpr,NegExpr{...}publicfinalclassConstantExprimplementsExpr{...}publicfinalclassPlusExprimplementsExpr{...}publicfinalclassTimesExprimplementsExpr{...}publicfinalclassNegExprimplementsExpr{...}sealed不仅可以修改接口,还可以修改类。JEP397的目的是限制接口的实现,限制类的继承。这样,类和接口的作者就可以更好地控制他们编写的类和接口。sealed修饰类有三大约束:sealed修饰类和它的允许子类必须属于同一个模块(JDK9中的模块化)。如果它是一个未命名的模块,它需要在相同的包名下。许可的每个子类必须直接实现密封类,而不是间接实现。许可的每个子类都必须使用一个修饰符来描述它如何传播从其父类继承的印章。比如子类用final修饰,就意味着不允许其他类继承。另一个例子是使用密封修改来继续限制子类的子类。本文转载自微信公众号“阿飞的博客”,可通过以下二维码关注。转载本文请联系阿飞博客公众号。