写点什么

进击的 Java(五)

作者:ES_her0
  • 2021 年 11 月 13 日
  • 本文字数:1144 字

    阅读完需:约 4 分钟

书接上回,上回聊到 Java10 和 11 的变化,除了 var 感觉真没什么变化,今天继续往后面的版本来看。看了后面的版本更新就会 faxing,10 和 11 其实内容还是挺丰富的。事实就是如此,12-15 都是一带而过的版本,几乎没什么摆的上台面的新功能,不知道是在划水还是在憋什么大招。

decimal 类似数据格式化

CompactNumberFormat首先出现在 12 的版本中,作用就是在不同的语言环境中给 decimal 类型的数据做格式化,比如美国的 1000 会写成 1k,1000000 会写成 1M,在印度相应的就是1 हज़ार1 क.。为了使这样的格式化更方便,就新增了这样的 formater。具体是这么用的:

NumberFormat fmt = NumberFormat.getCompactNumberInstance(                             new Locale("hi", "IN"), NumberFormat.Style.SHORT); String result = fmt.format(1000);
复制代码

好像是个没什么用的更新。

String 新增方法

  • indent:给字符串做缩进,接受一个 int 型的输入

  • transform:接受一个转换函数,实现字符串的转换

更像一个函数式语言了,举个例子:

var result = "foo"  .transform(input -> input + " bar")  .transform(String::toUpperCase);  //output: FOO BAR
复制代码

全新的 switch

这个不是游戏机的 switch,是 switch 表达式。之前的 switch 的写法相对冗长,大多数时候也只是作为一个优化多个 if else 的存在,使用起来也并不灵活。

switch (day) {    case MONDAY:    case FRIDAY:    case SUNDAY:        System.out.println(6);        break;    case TUESDAY:        System.out.println(7);        break;    case THURSDAY:    case SATURDAY:        System.out.println(8);        break;    case WEDNESDAY:        System.out.println(9);        break;    default:        System.out.println(0);}
复制代码

还有就是,假如忘记在每个 case 中写 break,那就都会走到 default 中,反正我是经历过自己写了这么蠢的 bug。现在怎么写呢:

switch (day) {    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);}
复制代码

引入了->,这里不是 lambda,是会执行后面的语句的意思。可能是看了 kotlin 的设计,觉得不错就复制下来了。不过 kotlin 没有 case,取而代之的是 when,个人感觉更能表达分支的含义。新的写法的灵活之处在于:

static void howMany(int k) {    System.out.println(        switch (k) {            case  1 -> "one";            case  2 -> "two";            default -> "many";        }    );}
复制代码

这本质上是一个求值语句,可以放在任何需要求值的地方。

Java12 的主要更新就是这些。

用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
进击的Java(五)