[英]Why is the declaration of type important in a statically typed language?
我试图理解静态类型的编程语言的好处,并且通过它,我想知道为什么我们需要在声明中包含类型? 它是出于任何目的而不是使类型明确吗? 如果是这种情况,我不明白这一点。 我理解静态类型允许在编译时进行类型检查,但如果我们省略显式类型声明,Java在编译时是否仍然可以推断类型?
例如,假设我们在Java中:
myClass test = new myClass();
这里不需要类型声明吗? 如果我没有弄错,这是静态绑定,Java应该知道test
是myClass
类型,即使在编译时也没有明确的类型声明。
对可能重复的响应:这不是关于静态与动态类型的问题,而是关于静态类型语言中的类型推断,如接受的答案中所述。
有静态类型语言,让你忽略类型声明。 这称为类型推断 。 缺点是设计(对于语言设计者来说)更难以实现(对编译器编写者来说更难),并且在出现问题时(对于程序员来说)更难以理解。 最后一个问题是,如果推断出很多(或所有)类型,编译器就不能告诉你比“类型不一致”更多 - 通常是通过一个神秘的消息。
在一个简单的案例中,如你引用的那个,是的,这很容易。 但随着你越来越远离琐碎的情况,系统的复杂性会迅速增加。
Java确实以非常有限的形式进行了一些类型推断。 例如,在此代码段中:
List<String> emptyStrings = Collections.emptyList();
...编译器已推断方法调用emptyList
返回List<String>
,而不仅仅是List<T>
,其中未指定类型T
该行的非推断版本(也是有效的Java)是:
List<String> emptyStrings = Collections.<String> emptyList();
有必要。 您可以拥有继承,其中类型是必需的。
例如:
Building build1 = new House();
Building build2 = new SkyScraper();
多态性是一样的。
然后,您可以将所有Building
s收集到数组中。 如果有一个House
和一个SkyScraper
你就不能这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.