以什么方式Java"几乎完全名义上键入"?

时间:2017-06-11 13:18:20

标签: java typing

我从this article读到" Java几乎完全是名义上键入的#34;。所以Java中有结构类型的部分。

Java类型系统的名义和结构部分是什么?

2 个答案:

答案 0 :(得分:2)

根据同一作者的早期帖子 - removal of function types

  
      
  1. 键入有两种基本方法:名义和结构。名义的身份基于其名称;一个人的身份   结构类型是基于它的组成(如“元组”)   int,int“或”from int to float“。)
  2.         

    大多数语言选择大部分是名义上的或大多数是没有   很多成功混合名义和结构的语言   键入除了“边缘”。 Java几乎完全是名义上的   (除了少数例外:数组是结构类型,但是在   底部始终存在名义元素类型; 泛型有混合   名义上和结构上也是,这实际上是其来源的一部分   许多人对仿制药的抱怨。)

因此,泛型的数组和部分是结构类型。

我认为结构类型可能类似<T extends A & B><T extends A>的超类型,或Object[]String[][]的超类型。这些类型的兼容性并非仅基于其名称。

答案 1 :(得分:1)

据我所知,Java完全是名义上输入的。 如果两个对象具有相同的命名类型,则它们是类型兼容的。在Java中声明类:

class A {
    public int value;
}

class B {
    public int value;
}

在语言结构方面没有提供任何方法来利用以相同顺序声明的相等成员。

在C中你可以利用(在某些情况下)声明A&amp; Bstruct,并且它们具有相同的二进制布局,这意味着您可以将它们相互复制并形成union并利用该重叠。