那些已经阅读了有效Java 第三版的人可能知道与该书相关的源代码可以在GitHub上获得 。 jbloch / efficiency-java-3e-source-code项目拥有1700多个星星,截至撰写本文时,它已被分叉了近800次。 在有效Java的第三版中, Java的版本主要是JDK 8,涵盖了JDK 9(有关此第三版所涵盖内容的详细信息,请参阅我的早期文章 )。
自有效Java第三版发布以来,JDK已添加了许多功能,并且以更快的6个月节奏来发布了许多新版本。 鉴于此,我特别感兴趣的是在琥珀色专家邮件列表中看到RémiForax已将jbloch / effective-java-3e-source-code分叉到GitHub项目forax / effective-java-3e-source-code中。 “已经获得了有效Java(第三版)的源并将其更改为使用var,切换表达式,记录和具有类型测试模式的instanceof”。
我喜欢从“ 有效Java” (第三版)中刷新示例以使用较新功能的想法:
- 开发人员可以了解如何使用最近发布的功能来应用有效的Java实践。
- 开发人员可以查看JDK 8/9版本与较新版本之间的差异,以了解新构造如何替换较旧的构造,从而更好地理解较新的构造。
- 在确定在特定情况下使用新结构的特定更改是否真正有助于代码可读性时,查看一些更改很有用。
分叉的forax / effective-java-3e-source-code ( README.md )的主页上指出:“源代码已更新为使用自Java 9(第三版使用的版本)以来可用的新结构。” 然后,该页面提供了关于应用于源代码的新构造类型的项目符号,并提供了指向每个新构造相关的JDK增强建议(JEP)的链接。
撰写本文时, 提交275eef87e4661f7f1edc41f4730cecf7a1096a97是主要的关注事项。 它涵盖对113个文件的更改。 我将在此处指出一些具体的更改,以说明所应用的更改的类型(其中一些是应用甚至在JDK 9之前可用的首选构造):
-
NutritionFacts.java
(第2章,第2项) 从类更改为记录 。 -
PickTwo.java
(第5章,项目32)的更改演示了开关表达式 。 -
CaseInsenstiveString.java
(第3章,项目10)的更改演示了类型测试模式的instanceof的应用。 -
WordList.java
(第3章,第14项)已更改为利用局部类型推断将var应用于变量声明。 这些更改很多,但这是我喜欢的更改。 我不相信其他地方的某些更改(例如将int
更改为var
)是否有帮助。InstrumentedSet
的更改 (第4章第18项)更具吸引力。 - 更改为
RecursiveTypeBound.java
(第5章,项目31)演示了在for
循环中使用var
。 -
Copy.copy
方法(第2章,第9项)已更改为接受Path实例而不是String实例,并更改为分别使用Files.newInputStream和Files.newOutputStream代替new FileInputStream
和new FileOutputStream
。
结论
能够查看与有效Java第三版相关的原始源代码的更改,以适应新的语言结构,这对于了解新结构及其与旧结构的关系或如何替换以及确定是否存在差异非常有用。在不同情况下是可取的。
翻译自: https://www.javacodegeeks.com/2020/02/source-code-for-effective-java-third-edition-updated-to-use-newer-features.html