2017-06-11 38 views

回答

2

根據同一作者先前的帖子 - removal of function types

  1. 有兩種基本的方法來打字:名義和結構。名義的身份是基於其名稱;一個 結構類型的身份是基於它是什麼組成的(如或「從int浮動功能」。「 INT,INT的元組」)

大多數語言回暖主要是標稱或主要結構;沒有 許多語言,成功地混合名義和結構 鍵入除「邊緣附近」。 Java是幾乎完全標稱 (有一些例外:數組是結構型,但在 底部總是有一個名詞性成分類型; 泛型有 名義和結構太的混合,這是 很多人對仿製藥的投訴來源的事實部分。)

所以,數組和仿製藥的部分是結構類型。

我認爲,結構類型可以是像<T extends A & B>是的<T extends A>的超類型,或Object[]是的String[][]的超類型。這些類型的兼容性不完全基於其名稱。

1

據我所知,Java完全是名義上的類型。 如果兩個對象具有相同的命名類型,則它們是類型兼容的。在Java中聲明類:

class A { 
    public int value; 
} 

class B { 
    public int value; 
} 

爲您提供了沒有任何語言結構的方式來利用以相同順序聲明的平等成員。

而在C,可利用(在某些情況下)宣佈A & Bstruct S和他們有相同的二進制佈局這意味着你可以將其複製過來互相形成union並利用該重疊。

相關問題