2009-06-29 23 views

答えて

14

これはジェネリックの使用です。このintroをチェックしてください。そして、それを読むことを忘れないでくださいtutorial

抜粋は(ジェネリック医薬品の使用に対して、キャストの使用を比較する)、次のとおりです。

あなたがコード<タイプが表示されたら>、 「タイプの」としてそれを読みます。 の宣言は "Collection of String c"と表示されます。 コードはジェネリックスを使用してより明確になり、 より安全です。安全でない のキャストと、追加の のカッコが削除されました。さらに重要なことは、我々は コメントからその 署名に 方法の明細書の一部を移動しているので、コンパイラはタイプ 制約が実行 時に違反していないことをコンパイル時に を確認することができます。プログラムは警告なしで をコンパイルするので、実行時に ClassCastExceptionがスローされないことを確実に確認するには、 と指定できます。特に大きいプログラムで ジェネリックを使用した場合の純効果は、 の可読性と堅牢性が向上しています。

例えば、リストのインタフェースは

public interface List<E> { 
    void add(E x); 
    Iterator<E> iterator(); 
} 

である。これは、あなたが持っている場合でも、その内容(Object型のだけではなく)同じ明示的な型のすべてのあるリストを作成できることを意味しますあなた自身でタイプを定義しました。だから、あなたが名前のクラスを作成する場合は、

List<Name> nameList = new List<Name>(); 

を書くことができ、その後、名前のインスタンスとそれを記入し、直接あなたが常にどちらかの名前を取得しますので、鋳造またはそうでなければ気にすることなく、そこから名前インスタンスを取得しますインスタンスまたはnullバック、決して異なるタイプのインスタンス。

さらに重要なことに、コンパイル時に失敗するため、このようなListにNameインスタンスと異なるものを挿入することはできません。

nameList.add(false); //Fails! 
nameList.add(new Name("John","Smith")); //Succeeds supposing Name has a 
             //firstName, lastName constructor 
+0

TがTypeの略語であるかのように 'List Of Type 'として' List 'を読みました。私は多くのコードで ''に気付きました。それは何のために短いですか?または私はちょうど "Esのコレクション"としてそれを読む必要があります – Aust

16

つまり、タイプがEのアイテムのコレクションを処理しているということです。あなたがお茶を飲んだとしましょう。

class Cup<T> { … } 

は今、あなたはどちらかコーヒーまたは紅茶(または何か他のもの)と、それを埋めることができます::

Cup<Tea> cuppa = new Cup<Tea>(); 
Cup<Coffee> foamee = new Cup<Coffee>(); 
それは一般的なエンティティとしてカップを記述するために理にかなっているように、代わりにお茶の、それはまた、コーヒーを握ることができます

これを有効にするには、TeaCoffeeの両方をプログラムで定義する必要があります。

これは、コードにというコンパイル時の制約です。コレクション(配列、リストなど)は通常、の1つのタイプ、タイプのアイテムを含んでいます。整数または文字列です。ジェネリックスはJavaでこれを表現するのに役立ちます:

Collection<String> strList = new ArrayList<String>(); 
strList.add("Foobar"); // Works. 
strList.add(42);  // Compile error! 

上記のコンパイルエラーに注目してください。ジェネリックスを使用する場合にのみこれを取得します。次のコードも機能しますが、エラーメッセージは表示されません。

Collection strList = new ArrayList(); 
strList.add("Foobar"); // Works. 
strList.add(42);  // Works now. Do we really want this?! 
+0

良い説明:) – Johanna

+2

クラスカップとして紛らわしい接触は実際にTのカップと発音されるでしょう:) – johnc

+1

@lagerdalek:それはまったく私のatttentionを逃しませんでした。 ;-) 実際には、この説明は次のとおりです。http://www.zazzle.com/c_cup_of_t_mug-168503670567870702 –

関連する問題