簡體   English   中英

為什么類型聲明在靜態類型語言中很重要?

[英]Why is the declaration of type important in a statically typed language?

我試圖理解靜態類型的編程語言的好處,並且通過它,我想知道為什么我們需要在聲明中包含類型? 它是出於任何目的而不是使類型明確嗎? 如果是這種情況,我不明白這一點。 我理解靜態類型允許在編譯時進行類型檢查,但如果我們省略顯式類型聲明,Java在編譯時是否仍然可以推斷類型?

例如,假設我們在Java中:

myClass test = new myClass();

這里不需要類型聲明嗎? 如果我沒有弄錯,這是靜態綁定,Java應該知道testmyClass類型,即使在編譯時也沒有明確的類型聲明。

對可能重復的響應:這不是關於靜態與動態類型的問題,而是關於靜態類型語言中的類型推斷,如接受的答案中所述。

靜態類型語言,讓你忽略類型聲明。 這稱為類型推斷 缺點是設計(對於語言設計者來說)更難以實現(對編譯器編寫者來說更難),並且在出現問題時(對於程序員來說)更難以理解。 最后一個問題是,如果推斷出很多(或所有)類型,編譯器就不能告訴你比“類型不一致”更多 - 通常是通過一個神秘的消息。

在一個簡單的案例中,如你引用的那個,是的,這很容易。 但隨着你越來越遠離瑣碎的情況,系統的復雜性會迅速增加。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM