我不确定为什么这个问题会在问题池里,我自认为我经常解释 “Java 新版本只不过是在应付年轻人们认为 Java 太古老,太不愿意更进潮流去更新” 的不健康想法,而 Java8 与 Java11 才是我认为最适合 Java 语法的两个版本。 至于高版本的那些优化?我不可否认他们都很好,尤其是它们依旧很尊重运行 Jvm 的环境与 Java 的优势。很多时候我会用 Java21 进行开发,但保持使用 Java8 的语法与特性而不用新版本(除非我想偷懒,反正开发时是用记事本——我会用 var 等高版本特性,然后使用 21 编译)。

Java16-21 做错了什么?事实上,大多特性例如 record,sealed class,这些有 Lombok 或 Kotlin 就足够好了。我并不是在说 STD 没他们更好,而是这些特性被实现出来的效果根本赶不上它们。在实战中我宁可用更复杂,更冗余的设计模式堆砌也不愿意用这些让代码与语法看起来更糟糕的东西。 我不评价 main 可以处于虚拟类,其更新的理由是 “为了让新人更好的学习 Java”。现代编程门槛并不高,但 OOP 语言本身就有学习高度。如果连从理解一个类到编写一个类都做不到,那么最好别来碰 OOP,它不适合你,因为你没有那么多精力继续思考你将要遇到的问题。

我自认为我在规范把控上做的很好——除了那些几乎就是写着玩的项目,完全处于放飞自我的写法。我严格把控我的规范,并且经常性为了规范问题重构代码——或许我不该提前优化,但我还是这么做了,因为我见不得我的代码是处于一团糟且在有更好可读性的选择下没有这么做。

很多业余的爱好者最容易犯下的问题就是拉踩语言。我见过很多劝我不要在和 Java 与 Kotlin 玩了,Rust 是一门很棒的语言,然后开始解释各种神秘原因又开始拉踩 Jvm。这很快就成为我讨厌 Rust 并且从感兴趣到完全没兴趣的过程。 我不否认,Java,C,D 这样的没有契约的语言想要写好通常都是需要开发者足够高的素养以及自律。但很显然,很多人能像我提供的代码都是很糟糕的。最糟糕的例子就是这样一段代码:

fun data() = if (flag) doSomethingA() else if (flag2) doSomethingB() else doSomethingC()

虽然并不是所有人都这么夸张——但这些人就算写出这样的代码我也不意外。他们没有任何规范,也不想提升自己的编程素养,只是沉浸在一种莫名其妙的优越感之中。 如果是那些真正在编写代码的朋友,他们告诉我是时候放弃 Java 了,我会告诉他们他们推荐的语言不在我将要处理的事物的优势区间内(相反,如果它确实在,我会去学,多一门语言技能对我来说是绝佳好事,我目前正在尝试学习 Zig 语言,这确实很不错)。 我只会说,乡毋宁怎么进神圣沪地了,把嘴闭上,不然给你丢到黄浦江去当浮尸。