当前位置: 首页 > 后端技术 > Java

还在用Java8?Java17的这5个新特性,你会喜欢

时间:2023-04-01 14:00:43 Java

SpringBoot3.0至少支持JDK17,各种开源软件都在全面拥抱JDK17。在《2022年Java开发人员生产力报告》中,在有升级计划的调查受访者中,有37%的人计划在未来六个月内升级到2021年9月发布的LTS版本JDK17。另有25%的人计划在未来6到12个月内升级到JDK17。你喜欢的这5个JDK17新特性,会让你升级JDK17吗?1、记录类(recordclass)传统的Java应用程序创建一个类,通过类的构造函数实例化类,并通过getter和setter方法访问成员变量或设置成员变量的值。有了record关键字,你的代码会变得更加简洁。packagecn.dayangshuo;/***普通dto*@authorDAYANG*/publicclassNormalEntity{publicstaticvoidmain(String[]args){//传统方式User1user1=newUser1("Dayang",1990);System.out.println(user1);//reocrdrecordclassUser2user2=newUser2("大洋",1990);System.out.println(user2);}}/***成员变量是固定的*/classUser1{Stringname;整数年龄;publicUser1(Stringname,Integerage){this.name=name;这个。年龄=年龄;}publicStringgetName(){返回名称;}publicvoidsetName(Stringname){this.name=name;}publicIntegergetAge(){返回年龄;}publicvoidsetAge(Integerage){this.age=age;}@OverridepublicStringtoString(){return"User1["+"name='"+name+'\''+",age="+age+']';}}packagecn.大阳朔;/***record记录类*也可以覆盖equals()hashCode()toString()方法*@authorDAYANG*/recordUser2(Stringname,Integerage){@OverridepublicStringtoString(){return"User2["+"name='"+name+'\''+",age="+age+']';}@Overridepublicbooleanequals(Objectobj){returnfalse;}@OverridepublicinthashCode(){返回0;}}2.新的字符串方法从JDK8到JDK17,陆续加入了更多的字符串方法,操作字符串更加方便。isBlank():如果字符串为空或仅包含空格(包括表格字符),则返回true。请注意,与isEmpty()不同,isEmpty()仅在长度为0时返回true。lines():将字符串拆分为字符串流,每个字符串包含一行。strip():分别去掉开头和结尾的空格;stripLeading()/stripTrailing()仅从开头和结尾删除空格。repeat(inttimes):返回一个字符串,该字符串采用原始字符串并将其重复指定的次数。readString():允许直接从文件路径读取到字符串。writeString(Pathpath):将字符串直接写入指定路径的文件。indent(intlevel):指定字符串的缩进量。负值只影响前导空格。transform(Functionf):将给定的lambda应用于字符串。packagecn.dayangshuo;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.util.stream.Stream;/***@authorDAYANG*/publicclassNewStringMethod{publicstaticvoidmain(String[]args)throwsIOException{//lines()方法示例Stringstr="hello\njava17\n\r!\r";流行=str.lines();lines.forEach(System.out::println);//readString()方法示例Pathpath=Path.of("C:\\NewStringMethod.java");字符串文本=Files.readString(路径);System.out.println(文本);}}3。清爽的开关表达式上代码:packagecn.dayangshuo;/***@authorDAYANG*/publicclassOldSwitch{publicstaticvoidmain(String[]args){oldSwitch();新开关();}privatestaticvoidoldSwitch(){intsize=3;字符串cn="";switch(size){case1:cn="壹";b雷克;case2:cn="二";休息;case3:cn="三";休息;默认值:cn="未知";}System.out.println(cn);}//更清爽privatestaticvoidnewSwitch(){intsize=3;Stringcn=switch(size){case1->"一";案例2->“两个”;案例3->“三”;默认->“未知”;};System.out.println(cn);}}4。Java在处理文本块中的json或xml文本时,需要进行多次繁琐的嵌套转义,代码编写和维护都比较费力。Java13开始引入文本块(Textblocks),上面代码:packagecn.dayangshuo;/***@authorDAYANG*/publicclassTextBlocks{publicstaticvoidmain(String[]args){//需要转义StringjsonStr="{\"name\":\"大洋\"}";//文本块,不需要转义字符StringtextBlocks="""{"name":"Dayang"}""";系统.out.println(jsonStr);System.out.println(textBlocks);}}5。密封类(Sealedclasses)packagecn.dayangshuo;/***定义一个抽象密封类Pet,其实现类只能是Dog、Cat,其他实现类不可*@authorDAYANG*/publicabstractsealedclassPet允许Dog、Cat{}finalclassDogextendsPet{}finalclassCatextendsPet{}