微博业务低价自助下单平台真人,免刷快手刷双击,抖音二十四小时点赞自助平台

昨天早上通过远程的方式 review 了两名新来同事代码大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!”

switch语句default最后_语句最后出现六个星号_语句最后加了呢

看看小王写的代码吧,看完不要骂我装逼啊。

看完上述代码后,你是不是会发出这样的感慨——“代码写得很好没有任何问题啊!”是不是觉得我在无事生非,错怪了小王!但此时我要送上《了不起的盖茨比》中的一句话:

我年纪还轻,阅历不深的时候,我父亲教导过我一句话,我至今还念念不忘。 “每逢你想要批评任何人的时候, ”他对我说,“你就记住,这个世界所有的人,并不是个个都有过你拥有那些优越条件。”

哈哈这句话不光是让你看的,也是给我看的。是时候冷静下来谈谈上述 switch 语句的老土问题了。

语句最后出现六个星号_语句最后加了呢_switch语句default最后

看到上图了吧,当不小心删掉 default 语句后,编译器就会报错,提示:“没有返回语句”,为了解决这个问题,我们可以新建一个 player 变量作为返回结果就像下面这样:

当添加了 player 变量后,case 语句中就需要加上 break 关键字;另外在 switch 语句结束后,返回 player。这时候,编译器并不会提示任何错误说明 default 语句在这种情况下是可以省略的。

从 JDK 12 开始(本例使用的是 JDK 13),switch 语句升级了,不仅可以像传统的 switch 语句那样作为条件的判断,还可以直接作为一个返回结果。来对小王的代码进行改造,如下所示:

够 fashion 吧?不仅 switch 关键字之前加了 return 关键字,case 中还见到了Lambda 表达式的影子,中划线和箭头替代了冒号,意味着箭头右侧的代码只管执行无须 break。

语句最后加了呢_语句最后出现六个星号_switch语句default最后

并且,default 语句变成了可选项可有可无,不信?你也动手试试。

新的 switch 语句足够的智能化,除了有上述的 3 个优势,还可以对枚举类型的条件进行校验。假如在 PlayerTypes 中增加了新的类型 PINGPANG(乒乓球):

此时编译器会发出以下警告:

switch语句default最后_语句最后出现六个星号_语句最后加了呢

意思就是 switch 中的 case 条件没有完全覆盖枚举中可能存在的值。好吧,那就把 PINGPANG 的条件加上吧。来看一下完整的代码:

switch 语句变成了强大的 switch 表达式,美滋滋啊!那假如一运动员既会打篮球又会打乒乓球呢?

就像上述代码那样,使用英文逗号“,”把条件分割开就行了666 啊!

switch语句default最后_语句最后加了呢_语句最后出现六个星号

不服气?switch 表达式还有厉害的,右侧还可以是括起来的代码块,就像 Lambda 表达式那样。

细心的同学发现一个之前素未谋面的关键字 yield,它和传统的 return、break 有什么区别呢?

先来看官方的解释

A yield statement transfers control by causing an enclosing switch expression to produce a specified value.

意思就是说 yield 语句通过使一个封闭的 switch 表达式产生一个指定值来转移控制权。为了进一步地了解 yield 关键字,我们可以反编译一下字节码:

编译器在生成字节码的时候对关键字做了自动化转义,转成了传统的 break 语句。这下清楚了吧?

但是,话又说出来,那些看似 fashion 的代码也不过是把部分秀技的工作交给了编译器,还可能存在对旧版本不兼容、对队友不友好的问题——代码土点就土点呗,没准是最实用的。

不好意思,我为昨天早上的嚣张向你道歉。。。。。。”我向小王发送了一条信息

好了,我亲爱读者朋友,以上就是本文的全部内容了,希望能够博得你的欢心。

最后一定会有不少读者想要问我怎么学习 Java 的,那我干脆就把我看过的优质书籍贡献出来:

1)入门版:《Head First Java》、《Java 核心技术卷》

2)进阶版:《Java编程思想》、《Effective Java》、《Java网络编程》、《代码整洁之道》

3)大牛版:《Java并发编程》、《深入理解Java虚拟机》、《Java性能权威指南》、《重构》、《算法》

就先介绍这么多,希望对那些不知道看什么书的同学有所帮助

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注