这种符合流畅风格/建造者模式(fluent/builder)的API,与现存的遗留系统相比,对开发者来说,更具现代感和舒适感 。
虽然当前的代码库只支持HTTP/1.1,但是已经包含了新的API 。这使得在对HTTP/2支持完成对过程中,开发者可以实验性地使用和验证新的API 。
相关代码已经进入OpenJDK沙箱仓库中,并很快登陆JDK 9的主干 。到那个时候,新的API将开始自动构建到Oracle的二进制beta版本中 。现在,对HTTP/2的支持已经可用,并将在未来数月内最终完成 。
在此期间,你可以使用Mercurial迁出源代码,并根据AdoptOpenJDK构建指导编译你迁出地代码,这样你就可以实验性地使用新的API了 。
第一批完成的功能之一是当前版本力不能及的异步API 。这个功能让长期运行的请求,可以通过sendAsync()方法,切换到VM管理的后台线程中:
HttpRequest req = HttpRequest.create(new URI("http://www.infoq.com")).body(noBody()).GET();CompletableFuture<HttpResponse> aResp = req.sendAsync();Thread.sleep(10);if (!aResp.isDone()) {aResp.cancel(true);System.out.println("Failed to reply quickly...");return;}HttpResponse response = aResp.get();
相比HTTP/1.1的实现,新的API带给开发者最多的是方便性,因为HTTP/1.1没有提供对已经发送到服务器端的请求的取消机制,而HTTP/2可以让客户端向已经被服务器端处理的请求,发送取消命令 。
JShell很多语言都为探索性开发提供了交互式环境 。在某些情况下(特别是Clojure和其他Lisp方言),交互式环境占据了开发者的大部分编码时间,甚至是全部 。其他语言,比如Scala或者JRuby也广泛使用REPL 。
当然,此前Java曾经推出过Beanshell脚本语言,但是它没有实现完全标准化,而且近年来,该项目已经处于不活跃状态 。在Java 8(以及jjs REPL)中引入的Nashorn JavaScript实现打开了更广泛地考虑REPL并将交互式开发成为可能的大门 。
一项努力将现代REPL引入Java 9的工作,以JEP 222作为开始,收录在OpenJDK的Kulla项目中 。Kulla这个名字来自古巴比伦神话,是建造之神 。该项目的主旨是提供最近距离的“完整Java”体验 。该项目没有引入新的非Java语义,并禁用了Java语言中对交互式开发没有用处的语义(比如上层的访问控制修改或同步的语义) 。
与所有REPL一样,JShell提供了命令行,而不是类似IDE的体验 。语句和表达式能够在执行状态上下文中,被立即求值,而不是非得打包到类中 。方法也是自由浮动的,而不必属于某个特定的类 。相反,JShell使用代码片断“snippets”来提供上层执行环境 。
与HTTP/2 API相似,JShell已经在独立的项目开发,以免在快速发展的时期影响主干构建的稳定性 。JShell预计在2015年8月期间合并到主干 。
现在,开发者可以参考AdoptOpenJDK说明指导,从头构建Kulla(源代码可以从Mercurial地址获得) 。
对于一些上手实验,最简单的可能是使用一个独立的试验jar 。这些jar包是社区专为不想从头构建的开发者构建好的 。
这些试验jar包可以从AdoptOpenJDK CloudBees的CI构建实例中获得 。
要使用它们,你需要安装Java 9 beta版(或者OpenJDK 9的构建版本) 。然后下载jar文件,重命名为kulla.jar,然后在命令行输入如下:
$ java -jar kulla.jar|Welcome to JShell -- Version 0.610|Type /help for help->
这是REPL的标准界面,和往常一样,命令是从单个字符开始并最终发出的 。
JShell有一个相当完整(但仍在发展)的帮助语法,可以通过如下命令轻松获得:
-> /helpType a Java language expression, statement, or declaration.Or type one of the following commands:/lor /list [all]-- list the source you have typed/seteditor <executable>-- set the external editor command to use/eor /edit <name or id>-- edit a source entry referenced by name or id/dor /drop <name or id>-- delete a source entry referenced by name or id/sor /save [all|history] <file> -- save the source you have typed/oor /open <file>-- open a file as source input/vor /vars-- list the declared variables and their values/mor /methods-- list the declared methods and their signatures/cor /classes-- list the declared classes/xor /exit-- exit the REPL/ror /reset-- reset everything in the REPL/for /feedback <level>-- feedback information: off, concise, normal, verbose, default, or ?/por /prompt-- toggle display of a prompt/cp or /classpath <path>-- add a path to the classpath/hor /history-- history of what you have typed/setstart <file>-- read file and set as the new start-up definitions/savestart <file>-- save the default start-up definitions to the file/?or /help-- this help message/!-- re-run last snippet/<n>-- re-run n-th snippet/-<n>-- re-run n-th previous snippetSupported shortcuts include:-- show possible completions for the current textShift- -- for current method or constructor invocation, show a synopsis of the method/constructor
推荐阅读
- 护士/护理人员的完整简历范文 护士简历范文
- |职场中有哪些常见的套路?
- |职场上,面子不是所谓的客气,而是让自己有了自信,让自己成功
- 养狗好处vs养狗坏处 养宠物的利弊
- 配音|余生,做一个能扛事的成年人
- 秋作文400字18篇作文 秋天的作文400字
- 翡翠手镯|翡翠手镯的价值,傻瓜教程,教你这样看懂翡翠手镯的色泽
- 短发|爱美的美女看过来,你知道秋天为什么要补水吗?
- 无基础唱歌技巧和发声方式教学 学习唱歌的方法
- 全球变暖的危害有哪些 全球变暖的后果