JDK7在语法上的几处小变化-之语法糖

下面的这几处变化都像是给JAVA程序元新增的语法糖。但是现在的公司用的基本是1.6吧,要改个版还得经过很多年吧~
现在淘宝用的就是1.6。貌似有的公司用的是1.5.用1.4的也有啊~哈
想尝语法糖的也只能自己写小程序玩玩了~

  • 字符串终于可以 switch 啦.
  • String可以swich终于解决了我那一大段的else if了,很期待这个。

        String s = ...
    switch(s) {
      case "quux":
        processQuux(s); //没有break,继续往下
      case "foo":
      case "bar":
        processFooOrBar(s);
        break;
      case "baz":
         processBaz(s); //没有break,继续往下
      default:
        processDefault(s);
        break;
    }
    
  • 从语法层面上支持集合,不再是数组的专利。
  • final List piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];
    final Set primes = { 2, 7, 31, 127, 8191, 131071, 524287 };
    final Map platonicSolids = { 4 : "tetrahedron",
        6 : "cube", 8 : "octahedron", 12 : "dodecahedron", 20 : "icosahedron"
    };
    
  • 菱形语法(泛型实例化类型自动推断)
  • List list = new ArrayList<>(); // <>这个真的很像菱形
    
  • 在目前版本中,不可具体化的泛型(任意类型)可变参数,在编译时,会在调用处产生警告,JDK7里将这个警告挪到了方法定义处。
  • 这个不算语法糖嘿嘿

    static  List asList(T... elements) { ... }
    static List> stringFactories() {
        Callable a, b, c;
        ...
         // 警告处
        return asList(a, b, c);
      }
    

    变化后:

    // 警告处
    static  List asList(T... elements) { ... }
    static List> stringFactories() {
        Callable a, b, c;
        ...
        return asList(a, b, c);
      }
    
  • 支持二进制语法和单位级别的数字表示方式
  • // 8位byte
    byte aByte = (byte)0b00100001;
    // 16位short
    short aShort = (short)0b1010000101000101;
    // 32位int
    int anInt1 = 0b10100001010001011010000101000101;
    

    支持单位级别的数字,提高可读性

    long underScores = 9_223_372_036_854_775_807L; // 每三位加一下划线,等同于 9,223,372,036,854,775,807
    
  • JSR 292 动态类型语言支持
  •  Dynamic x = (动态语言脚本);
    Object  y = x.foo("ABC").bar(42).baz();
    
  • 动态资源管理
  • 这个。。。无奈啊~程序员门槛越来越低了啊~~~
    还记得嵌入式sql。那个过程。。一不小心就郁闷死啊~还有socket链接的过程~~~
    现在什么都被封装了~~~~

     BufferedReader br = new BufferedReader(new FileReader(path));
    try {
        return br.readLine();
    } finally {
        br.close();
    }
    

    在JDK7里,你只需要将资源定义在try()里,Java7就会在readLine抛异常时,自动关闭资源。
    另外,资源类必须实现 Disposable 接口。支持管理多个资源。

     try (BufferedReader br = new BufferedReader(new FileReader(path)) {
        return br.readLine();
    }
    

    JDK7有点动态化了 ,感觉从动态语言那里学了好多。但是JDK7好像还是没有加进闭包(closure)这个特性~这个特性讨论的很激烈呀~
    java不能对操作符进行重载 诶~~~这样也避免了一些学习的曲线问题~但是操作符重载可是很IN的一个特性啊。至少能让C++程序员有归属感吧~
    operator overloading….。。

    5 comments

    1. 产品经理新视线 说到:

      这个代码高亮插件不错吧~~
      诶~其实一点都不好用 呜呜~~ :twisted: 用起来都要写代码似的~

    2. 大树 说到:

      windows live writer的插件好用多了,我很久不用wp后台写日志了

    3. 大树 说到:

      wp支持的wlw都支持,只多不少,呵呵

    发布评论

    您的电子邮箱不会被公开。 标记为 * 的区域必须填写

    *

    无觅相关文章插件,快速提升流量