私はthis articleから "Javaはほぼ完全に型付けされています"と読みました。したがって、Javaには構造的に型付けされた部品があります。Javaはどのように「ほぼ完全に型付けされていますか」?
Java型システムの名目上および構造上の部分はどれですか?
私はthis articleから "Javaはほぼ完全に型付けされています"と読みました。したがって、Javaには構造的に型付けされた部品があります。Javaはどのように「ほぼ完全に型付けされていますか」?
Java型システムの名目上および構造上の部分はどれですか?
同じ作者による以前の記事によると - removal of function types:
- タイピングへの2つの基本的なアプローチがあります:名目と構造が。名目の身元はその名前に基づいています。 構造型のアイデンティティ(例えば、「 int型のタプル、int型」または「int型からfloatへの関数」として。)それはで構成されているものに基づいている
ほとんどの言語は、ほとんどが公称またはほとんど構造選びます; "縁の周り"を除いて公称と構造を正しく混合する多くの言語が入力されていません。 Javaはいくつかの例外を除いて( ほぼ完全に名目です:配列は構造型ですが、 下部の名目要素の型が常にある; ジェネリック医薬品は、あまりにも名目と構造 が混在しているが、これはです実際には の出典の一部です。
したがって、配列とジェネリックの一部は構造型です。
私は構造タイプが<T extends A & B>
がString[][]
のスーパータイプであること<T extends A>
、またはObject[]
のスーパータイプであることのようなものかもしれないと思います。これらの型の互換性は、名前にのみ基づいていません。
私が言うことができる限り、Javaは名目上完全に型指定されています。 2つのオブジェクトは、同じ名前付きの型であれば型互換性があります。 Javaでは、クラスを宣言:
class A {
public int value;
}
class B {
public int value;
}
は言語のように、何もあなたを提供して同じ順序で宣言対等な構成員を利用するために構築します。
Cでは、A
& B
struct
としてSを宣言し、それらを使用して、互いの上にそれらをコピーしunion
を形成し、その重なりを利用できることを意味同じバイナリレイアウトを有すること(特定の状況下で)を利用することができる一方。