java - 为什么类型声明在静态类型语言中很重要?

标签 java oop variable-declaration static-typing

我试图了解静态类型化编程语言的好处,由此,我想知道为什么我们需要在声明中包含类型?除了使类型明确之外,它还有什么用吗?如果是这样的话,我不明白这一点。我知道静态类型允许在编译时进行类型检查,但如果我们省略显式类型声明,Java 是否仍然无法在编译时推断类型?

例如,假设我们在 Java 中有:

myClass test = new myClass();

这里不是不需要类型声明吗?如果我没记错的话,这是静态绑定(bind),Java 应该知道 testmyClass 类型,即使在编译时也没有显式声明类型。

对可能重复的回应:这不是关于静态类型与动态类型的问题,而是关于静态类型语言中的类型推断的问题,如已接受的答案中所述。

最佳答案

静态类型语言允许您省略类型声明。这叫做 type inference .缺点是它更难设计(对于语言设计者),更难实现(对于编译器编写者),并且在出现问题时更难理解(对于程序员)。最后一个的问题是,如果推断出许多(或所有)类型,编译器只能告诉你“类型并不完全一致”——通常是通过一条神秘的消息。

在您引用的这种微不足道的情况下,是的,这很简单。但是,当您远离微不足道的情况时,系统的复杂性会迅速增加。

Java 实际上以非常有限的形式进行了一些类型推断。例如,在这个片段中:

List<String> emptyStrings = Collections.emptyList();

...编译器推断方法调用emptyList返回 List<String> ,而不仅仅是一个 List<T>其中类型 T未指定。该行的非推断版本(也是有效的 Java)是:

List<String> emptyStrings = Collections.<String> emptyList();

关于java - 为什么类型声明在静态类型语言中很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34460685/

相关文章:

java - 类内部定义的接口(interface)

node.js - module.exports 在变量声明中使用时会做什么

数字文字后面的 C# 后缀

javascript - 在 Javascript 中按对象文字中的名称(作为字符串)调用函数

c++ - 无法在成员函数本身中声明派生数据类型指针变量

java - 在 JTextField 中检测回车键

java - 从 Android 应用程序的 Java 桌面应用程序运行 Gradle 构建脚本

java - 如何使一个 ImageView 在按下另一个 ImageView 时消失?

java - 模式问题,它包括 (.*?) 之外的文本

java - 抽象类,OOP