小编典典

Java虚拟机是否允许对返回类型进行重载?

java

我已经看完了这个演讲

幻灯片编号:26引用

Java language does not allow overloading on return type

Java Virtual machine does allow overloading on return type

这些说法正确吗? 如果两个语句都正确,那么如何使代码可编译,以便jvm运行代码?

提前致谢。


阅读 182

收藏
2020-11-26

共1个答案

小编典典

这些说法是完全正确的。

请记住,Java是两件事-
一是语言,其二是虚拟机。尽管将语言限制为不允许基于类型的方法重载使Java成为一种更简单的语言,但JVM仍可以允许这样做以使其更强大。

作为一种语言,Java具有一种编译器,该编译器执行的规则使Java成为比允许这样做的语言更简单,更轻松的编程语言。为此,它限制了您只能在Java语言本身中执行的操作。在JVM上运行诸如Scala或Ruby之类的东西需要不同的规则和功能,在此级别上,重要的是JVM必须具有灵活性,以使JVM取得如此巨大的成功,以至于在许多平台和设备上都能找到。

在可能通过返回类型重载的语言中,这将很容易出错,并且不支持该功能的决定是故意使Java成为不易出错的编程语言。编译器将如何知道您打算调用哪个函数?

另一方面,JVM是存在的底层,高度优化的虚拟机,用于运行字节码而不是Java。因此,以这种方式限制JVM是不明智的,因为它应该能够运行根本不是从Java生成的字节码。

另一个例子是多重继承,这在Java中不可用,但是没有什么可以阻止您编写支持多重继承并将其编译为字节码的语言。这将使您的语言更难以使用,并且可能更容易出错,但是如果您需要该功能,JVM不会阻止您。

2020-11-26