Java是以什么方式出现的;几乎完全是名义上键入的;?

Java是以什么方式出现的;几乎完全是名义上键入的;?,java,typing,Java,Typing,我读到“Java几乎完全是名义上类型化的”。因此,Java中有结构类型化的部分 哪些是Java类型系统的名义和结构部分?据我所知,Java完全是名义类型的。 如果两个对象具有相同的命名类型,则它们是类型兼容的。在Java声明类中: class A { public int value; } class B { public int value; } 不提供任何语言构造来利用以相同顺序声明的相等成员 而在C语言中,你可以利用(在某些情况下)将A和B声明为structs,并且它们

我读到“Java几乎完全是名义上类型化的”。因此,Java中有结构类型化的部分


哪些是Java类型系统的名义和结构部分?

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

class A {
    public int value;
}

class B {
    public int value;
}
不提供任何语言构造来利用以相同顺序声明的相等成员


而在C语言中,你可以利用(在某些情况下)将
A
B
声明为
struct
s,并且它们具有相同的二进制布局,这意味着你可以将它们相互复制,形成一个
union
并利用这种重叠

  • 有两种基本的打字方法:名词式和结构式。名词的身份基于其名称;身份 结构类型基于它的组成(例如“结构的元组”) int,int“或”函数从int到float“
  • 大多数语言大多选择名词或结构;没有 许多语言成功地混合了名词和结构 除了“边缘”之外,Java几乎完全是名义上的 (除了少数例外:数组是一种结构类型,但在 底部总是有一个标称元素类型;泛型混合了 名义上和结构上太过,这实际上是 许多人对仿制药的抱怨。)

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


    我认为结构类型可能类似于
    的超类型,或者
    对象[]
    字符串[]
    的超类型。这些类型的兼容性不仅仅基于它们的名称。

    感谢Goetz link,帮助我们了解它们的动机:
    如果我们添加函数类型,它会立即将库分开。