2012-09-23 10 views
17

Thisのリンクは次のように述べている:パラメータ化された型は何を意味しますか?

実際の型引数を持つジェネリック型のインスタンス化は、パラメータ化された型と呼ばれています。 (パラメータ化された型の) 例:

Collection<String> coll = new LinkedList<String>();

ので、パラメータ化された型は何でしょうか?

  • Collection<String>または
  • LinkedList<String>
+5

どのようにあなたが与えたリンクで次の文を読んだについて:「宣言コレクションは、パラメータ化された型を表し、ジェネリック型のコレクションのインスタンス化され、場所ホルダーEはコンクリートタイプのStringに置き換えられましたか? –

+0

@JBNizet、はい、私の混乱は、インスタンス化タイプ 'LinkedList 'に由来しています。以下のあなたのコメントは私のためにそれを明確にします。 – wulfgarpro

答えて

22

彼らは両方のパラメータ化された型です:パラメータとして、他の種類を取るタイプ。

あなたは、式の両側に異なる種類を持っているという事実は無関係であり、そして、すなわちLinkedListCollectionのサブタイプであるため、多型行動に関係しています。コレクション

Collection<String> 
LinkedList<String> 

1

どちらの用途はStringを使用するタイプであることをここにパラメータ化された型です。

11

一般に、パラメータ化された型は、他のオブジェクトを扱うクラスで、その型は面白くない。型はシンボリックな "name"を使って定義され、クラスのインスタンスが作成されるときに渡されます。例えば

MyClassラップ上記の例で

class MyClass<T> { 
    private T obj; 
    public MyClass<T>(T obj) { 
     this.obj = obj; 
    } 
    public int getId() { 
     return obj.hashCode(); 
    } 
} 

は、任意の型のオブジェクトとこの方法が常に存在するという事実を使用して、その方法hashCode()を実行します。ここで

は、このクラスを使用する方法です。

int sid = new MyClass<String>("aaaa").hashCode();

あなたがnew MyClass<String>(123)を言うことができないことを注意してください:オブジェクトがパラメータStringで作成されているという事実は、コンストラクタの引数の型が決まります。

あなたの例に戻るCollection<String>は、 "文字列のコレクション"を意味します。つまり、このコレクションに他のタイプのオブジェクトを追加することはできません。

+0

がTの場合、Tのすべてのサブクラスを渡すことはできますか? – Ungeheuer

+0

ほぼ正しいです。 Stringは最終クラスであり、拡張することはできません。 – AlexR

+0

したがって、基本的に汎用型はパラメータ化された型です。 –

0

ParameterizedTypeは、Collectionなどのパラメータ化された型を表します。

このパッケージで指定されているように、リフレクションメソッドで初めてパラメータ化された型が作成されます。パラメータ化された型pが作成されると、pがインスタンス化するジェネリック型宣言が解決され、pのすべての型引数が再帰的に作成されます。型変数の作成プロセスの詳細については、TypeVariableを参照してください。パラメータ化された型の繰り返し作成は効果がありません。

このインターフェイスを実装するクラスのインスタンスは、同じジェネリック型宣言を共有し、同じ型パラメータを持つ2つのインスタンスを同等にするequals()メソッドを実装する必要があります。

4

一般的な型であり、パラメータ化された型は同義です。しかし、例えばBox<Integer>をジェネリック型と呼ぶのは正しいとは言えません。だから、おそらく:

ジェネリック型は、仮型パラメータ/ sの

class Box<T> { .. } 

Box<T>との宣言では、パラメータ化された型は、実際の型引数/ sの宣言

あるジェネリック型

です

Box<Integer> b;   

Box<Integer>は、パラメータ化されたタイプ

生の型は、実際の型引数/ sを持たない汎用型の宣言です。

class Box<T> { .. } 
Box b; 

Box

は、生タイプです

関連する問題