欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识
原文出处: @colobu

在10月22的 Oracle Codeone大会上,Java 平台的首席架构师 Mark Reinhold 做了The Future of Java is Today的演讲, 回首了最近 Java 的几个版本的新的成果,Java 的每年两次的宣布周期, 澄清了关于宣布流程和 Java 版本的几个误区,最后花了很大的篇幅先容了将来 Java 几个令人很是等候的几个孵化中项目,可觉得Java带来更好的出产力、机能和可扩展性。我整理了这四个项目相关的常识,你可以提前相识到 Java 将来的这些酷炫的特性。

 Project Loom 提供一个  <a href=劳务调派打点系统 轻量级的用户态的纤程" class="aligncenter size-full wp-image-30342" title="java_release" src="/uploads/allimg/c181029/1540KGQ53J0-1M53.png" />

Mark Reinhold 我不多先容了,昆山软件开发, 之前要相识Java的将来动向看Java之父James Gosling, 他分开Oracle之后想相识Java的动向就看 Mark Reinhold。

 Project Loom 提供一个  <a href=劳务调派打点系统 轻量级的用户态的纤程" class="aligncenter size-large wp-image-30343" title="java" src="/uploads/allimg/c181029/1540KGQ60S0-25P0.jpg" />

Project Amber

提供面向出产力的 Java 特性, 好比字符串字面值、switch 表达式、模式匹配、record 等。

这个项目包括许多Java语言特性的新成果。

包罗

正在实现的

  • JEP 302 Lambda Leftovers:对lambda成果的补强, 好比下划线变量等 BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i); lambda参数的Shadowing,消除一些歧义等修补事情
  • JEP 305 Pattern Matching:这个成果很是好,Scala 和 Kotlin 中的模式匹配很是强大,这个 JEP 提供了雷同的成果,共同 switch 和 record,可以大大简化条件分支的处理惩罚,如:
  • int eval(Node n) {
        switch(n) {
            case IntNode(int i): return i;
            case NegNode(Node n): return -eval(n);
            case AddNode(Node left, Node right): return eval(left) + eval(right);
            case MulNode(Node left, Node right): return eval(left) * eval(right);
            default: throw new IllegalStateException(n);
        };
    }

    数据类,一行界说,省去了字段、字段会见要领和 hash、equals、toString 等要领,劳务派遣管理系统,界说 ValueObject 简化抵家了:

    record Point(int x, int y);
  • JEP 325 Switch Expressions (preview, JDK 12): 当前的switch是什么, 语句。这个jep扩展switch,而且可以作为表达式利用:
  • int numLetters = switch (day) {
        case MONDAY, FRIDAY, SUNDAY -> 6;
        case TUESDAY                -> 7;
        case THURSDAY, SATURDAY     -> 8;
        case WEDNESDAY              -> 9;
    };
  • JEP 326 Raw String Literals (preview, JDK 12): 这个许多语言中都实现了,可以更好的书写字符串字面值, 尤其在正则表达式中处理惩罚许多转义符的时候,和 Go 雷同:
  • String s = `
    this is my
        embedded string
    `;
  • JEP draft 8209434 Concise Method Bodies: 正常的要领界说以大括号包裹,这个特性提供了雷同 Lambda 表达式简化方法的形式,直接单行界说要领体,雷同 C# 和 Kotlin 的特性:
  • class MyList<T> implements List<T> {
        private List<T> aList;
        public int size() = aList::size;
        public T get(int index) = aList::get;
        ...
    }

    已宣布的

  • JEP 286 Local-Variable Type Inference (var) (JDK 10):当地变量的范例揣度, 也就是利用var界说变量,有些同学已经用起来了,很是的利便,有点雷同动态范例的语言,感受固然还没有到达Scala那么机动,已经很不错了
  • JEP 323 Local-Variable Syntax for Lambda Parameters (JDK 11):对当地变量的范例揣度的增强,用在 Lambda 表达式中。
  • 临时弃捐的

  • JEP 301 Enhanced Enums
  • 总之,每一个特性都可以大大简化我们的开拓,让 Java 更像一个“现代的”编程语言。

    Project Loom

    提供一个轻量级的用户态的纤程,叫做 fiber,越发简化并发编程,并且更有效。

    这个特性多年前我先容过: https://colobu.com/2016/08/01/talk-about-quasar-again/,其时它还像一个玩具,开拓的时候很贫苦,并且有一些坑。作者厥后认真这个 JEP,可以很好的从 Java 实现的角度去实现 fiber,所以极端等候。

     Project Loom 提供一个  <a href=劳务调派打点系统 轻量级的用户态的纤程" class="aligncenter size-full wp-image-30344" title="fiber1" src="/uploads/allimg/c181029/1540KGQC510-3KE.png" />

    Mark Reinhold 首先利用 jshell 演示了 fiber 的利用,一两行措施就可以做到,昆山软件开发,我以为利便性可以和 goroutine 相媲美了。他接着利用一个 Restful 的例子较量了 Thread 和 Fiber 的机能, Restful 处事收到请求后暂停100毫秒,模仿一个慢的 IO 操纵,功效显示 Thread 许多几百毫秒的尖峰,而 fiber 在预热之后一直不变在100毫秒。 这绝对是 Java 措施员值的存眷一个新特性。

     Project Loom 提供一个  <a href=劳务调派打点系统 轻量级的用户态的纤程" class="aligncenter size-full wp-image-30345" title="fiber2" src="/uploads/allimg/c181029/1540KGQL940-43931.png" />

    例子利用 Jetty 做处事器,线程池执行呼吁的时候让 fiber 去调治,这种方法对现有的代码窜改很小。

     Project Loom 提供一个  <a href=劳务调派打点系统 轻量级的用户态的纤程" class="aligncenter size-large wp-image-30346" title="fiber3" src="/uploads/allimg/c181029/1540KGQR1Z-595A.png" />