广州住建网站,pw网站更换域名,在哪个网站上做兼职比较好,视频号直播推广二维码首先我们必须承认#xff0c;Java 8 是一个里程碑式的版本#xff0c;这个相信大多数Java程序员都认同#xff0c;其中最知名的是 Streams Lambda #xff0c;这让 Functional Programming 成为可能#xff0c;让 Java 换发新的活力。这也是即便 Oracle 不在支持 Ja…首先我们必须承认Java 8 是一个里程碑式的版本这个相信大多数Java程序员都认同其中最知名的是 Streams Lambda 这让 Functional Programming 成为可能让 Java 换发新的活力。这也是即便 Oracle 不在支持 Java 8 的更新各个云厂商还是积极支持站点为https://adoptopenjdk.net/可以让 Java 8 能继续保留非常长的时间。
目前非常多的同学日常开发并没有切换到 Java 8 后续的版本所以这篇文章我们打算写一个后 Java 8 时代的特性主要是偏向于开发的不涉及 GC , Compiler , Java Module , Platform 等如果一一解释估计非常长的文章当然后续可以写另外文章介绍。下面的这些特性会影响到我们日常的代码编写。
考虑到 Java 13 马上发布所以版本覆盖从 9 到 13 与此同时 Java Release 的方式调整一些特性是在某一版本引入(preview)后续收到反馈后做了非常多的增强和完善这里就不一一说明特性是哪个版本的你可以理解为后Java 8版本后的特性大杂烩。参考资料来源于官方 features 和 pluralsight 上每一个版本的 Java 特性介绍。
var 关键字(局部变量类型推导) Local-Variable Type Inference
Java 支持泛型但是如果类型非常长你又不是特别关注你用 var 关键字就可以啦可以让你代码非常简洁。Java IDE 都非常好地支持 var不用担心代码提示等问题。
MapString, ListMapString,Object store new ConcurrentHashMapString, ListMapString,Object();MapString, ListMapString,Object store new ConcurrentHashMap();MapString, ListMapString,Object store new ConcurrentHashMapString, ListMapString,Object();//lambdaBiFunctionString, String, String function1 (var s1, var s2) - s1 s2;System.out.println(function1.apply(text1, text2));
复制 confd 文件到 bin 目录下启动 confd
sudo cp bin/confd /usr/local/bin
confd
实际的使用中还有一些小的限制如 null 赋值问题等但是这些不是什么问题马上用起来。
ProcessHandle
虽然我们很少在 Java 中调用系统命令但是偶尔用到也是有的当然都是ProcessBuilder 。还有一个就是增强的 ProcessHandle 可以了解其他进程的一些信息如获取所有进程、某一进程的启动的命令、启动时间等等。
ProcessHandle ph ProcessHandle.of(89810).get();
System.out.println(ph.info());
Collection factory methods
创建 ArrayList , HashSet 还是用 new 方法有点过时啦直接使用工厂方法就可以啦。
SetInteger ints Set.of(1, 2, 3);
ListString strings List.of(first, second);
String 类的新 API
这里没法一一列举说几个重要的 了解后就不需要第三方的 StringUtils 啦。repeat, isEmpty, isBlank, strip, lines, indent, transform, trimIndent, formatted 等
HTTP 2支持
当然如果你使用 OkHTTP 3 那就没有问题如果你不想引入其他开发包那么 Java 已经支持 HTTP 2 啦代码基本也差不多当然同步和异步都支持。 HttpClient client HttpClient.newHttpClient();HttpRequest req HttpRequest.newBuilder(URI.create(https://httpbin.org/ip)).header(User-Agent, Java).GET().build();HttpResponseString resp client.send(req, HttpResponse.BodyHandlers.ofString());System.out.println(resp.body());
Text Block(JDK 13)
在之前版本你要有一大段文本你要对双引号进行转换转换后非常不适合阅读如下
String jsonText {id: 1, nick: leijuan};
新的方式 text block:
//languagejsonString cleanJsonText {id: 1, nick: leijuan};
简单多啦你可以自由写代码不用担心各种双引号转换的问题copy分享转换等。稍等你为何要在 cleanJsonText 前面添加 //languagejson 这个什么鬼这个是 IntelliJ IDEA 的一个特性你的 text block 还是有语义的如是一段HMTL、JSON、SQL 等添加这个后马上就代码提示啦。一般人我不告诉他 :)
text block 还有一个小特性就是基本的模板特性支持你在text block中要引入一些上下文变量直接 %s 然后调用 formatted 方法就可以啦。 //languagehtmlString textBlock span stylecolor: greenHello %s/span;System.out.println(textBlock.formatted(nick));
Switch 提升
Arrow Labels
接入了 - switch 箭头不需要写那么多 break 啦代码如下 //legacyswitch (DayOfWeek.FRIDAY) {case MONDAY: {System.out.println(1);break;}case WEDNESDAY: {System.out.println(2);break;}default: {System.out.println(Unknown);}}//Arrow labelsswitch (DayOfWeek.FRIDAY) {case MONDAY, FRIDAY, SUNDAY - System.out.println(6);case TUESDAY - System.out.println(7);case THURSDAY, SATURDAY - System.out.println(8);case WEDNESDAY - System.out.println(9);}
Switch Expressions
也就是 switch 可以有返回值啦代码如如下 //Yielding a valueint i2 switch (DayOfWeek.FRIDAY) {case MONDAY, FRIDAY, SUNDAY - 6;case TUESDAY - 7;case THURSDAY, SATURDAY - 8;case WEDNESDAY - 9;default - {yield 10;}};
关键字 yield 表示 switch 表达式的返回值。
我想马上使用这些特性
你说的这么多都非常不错但是我们线上还是 Java 8 环境有什么用也就看看而已。不用担心有人也想到啦。 https://github.com/bsideup/jabel 就是这个项目支持将 JDK 12 的各种语法能够透明编译到 Java 8 的 VM 上也就是你现在用这些语法特性跑在 Java 8 上完全没有问题所以即便是 Java 8 的环境没有问题以上的特性都可以使用。
如何使用非常简单。
首先下载最新的 JDK如 JDK 13 然后在依赖中添加 jabel-java-plugin
dependencygroupIdcom.github.bsideup.jabel/groupIdartifactIdjabel-javac-plugin/artifactIdversion0.2.0/version/dependency
然后调整一下 maven 的 compiler plugin将 source 设置为你想要的 Java 版本如 13 target 和 release 设置为 8 就可以啦。 IntelliJ IDEA 会自动识别也不需要调整。
plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource13/sourcetarget8/targetrelease8/release/configuration
/plugin
这样你就可以愉快地使用介绍的特性啦。
总结
如果有一些特性没有整理而且非常有用的大家反馈一下如 API 的调整等方便后续同学参考一下。
原文链接 本文为云栖社区原创内容未经允许不得转载。