Five Features to Make Java Even Better

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

我偶然发现了Brian Goetz提出的关于Java中数据类的这个提案,我立刻意识到我也有一些关于如何改进Java作为一种语言的想法。实际上,我有很多这样的想法,但这是一个关于最重要的五个想法的简短列表。

全局变量。在Java中有单例模式,我们都知道它们不过是全局变量。在Java中启用全局变量并摆脱单例模式会不会很好呢?PHP、JavaScript、Ruby和很多其他语言都有全局变量,为什么Java没有呢?看看这段代码:

然后,要访问它,我们必须使用:

这是一个单例。看看它有多啰嗦?我们可以简单地用一个全局变量来替代它(我建议使用 global 这个关键字)。

And then:

user.getName();

写的代码更少,阅读起来更容易!

为了将静态方法分组在一起,我们创建实用类,其中必须定义私有构造函数以防止实例化。此外,我们必须记住静态方法所在的特定实用类。这只是额外的麻烦。我建议在Java中添加全局函数和可选的“命名空间”来将它们分组起来。请看一下这个实用类:

现在看看这个带有命名空间的全局函数。

我的观点是,既然我们已经将类用作函数的集合,就让它更加方便一些。在某些应用中,我们甚至不需要命名空间,只需要像在C和C++中一样使用全局函数。

为了从外部访问对象的私有属性或方法,我们需要使用Reflection API。虽然这并不特别困难,但需要几行代码,这些代码并不容易阅读和理解。

我建议我们允许任何对象访问另一个对象的所有属性和方法。

当然,如果它们是私有的,编译器会发出警告。在编译时,您只需忽略警告并继续进行。如果您真的关心封装性,请注意警告并采取其他行动。但在大多数情况下,程序员会忽略它,因为他们仍然会愉快地使用反射 API。

让我们能够使用不完整的参数列表来调用构造函数和方法将会很方便。我们没有提供的参数将默认设置为null。另外,当一个方法需要返回值但没有return语句时,Java应该返回null。这几乎和PHP、Ruby以及许多其他语言的工作方式完全一样。我相信这对于Java开发者来说也将是一个方便的功能。

当一些参数是可选的时,我们不需要定义那么多方法。方法重载非常冗长且难以理解。相反,我们应该有一个带有长参数列表的方法。一些参数由调用者提供,其他参数将被设置为null。方法将决定如何处理,例如:

然后我们只需调用 save(f)save(f, "UTF-16")。这个方法会明白我们的意思。我们还可以使它更方便,就像在Ruby中那样,通过名称提供方法参数。

此外,当没有需要返回的内容时,方法默认必须返回 null。写上 return null 只是浪费了一行代码,并没有真正提高可读性。看一下:

从这段代码很明显,如果文件存在,该方法会加载并返回其内容。如果不存在,它会返回null,这将是对调用者的一个良好指示,表明出现了问题,文件内容不可用。

我认为我们需要这个功能是很明显的:每个私有属性都必须自动拥有一个setter和一个getter。不需要我们自己创建,Java会像KotlinRuby一样提供它们。如果没有getter和setter来读取和修改属性,那么拥有这个属性有什么意义呢?

有了这个新功能,我们将不再需要Lombok,也不需要IntelliJ IDEA的帮助。

也许我应该将我的想法转化为正式的提案提交给JCP。你认为呢?

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-05 at 22:23

sixnines availability badge   GitHub stars