2012-01-11 16 views
1

私は比較的Javaに新しい、私は最近私が以前に見たことがない構文を見つけました。クラス宣言で型を定義していますか?

public class loadSomeData extends AsyncTask<String, Integer, String>{ etc..} 

私を混乱させる部分は、角かっこの間のものです。私はこのクラスでそれぞれの型がどのように使われているのか理解していますが、なぜそれらをクラス宣言で宣言しますか?

これは具体的には:<DataType> Javaで呼び出されるので、私はそれを研究することができますか?あなたが"generics" in Javaを探している

答えて

3

ありがとうございました。

要するに、コレクションクラス(または実際のクラス)は、その構文を使用してパラメータ化された型を宣言できるため、クラスのユーザーは同じ型のオブジェクトのみがそのコレクションに格納されるそれによって)。

ジェネリック前

そこリストなどのコレクションには型安全ではなかった:

List numbers = new ArrayList(); 
numbers.add(Integer.valueOf(123)); // OK 
numbers.add("foo"); // Uh-oh! 

は、しかし、今あなたが宣言のみのタイプ(複数可)を追加することができるようにすることができます:

List<Number> numbers = new ArrayList<Number>(); 
numbers.add(Integer.valueOf(123)); // OK 
numbers.add("foo"); // Compile-time error! 
0

<DataType>構造体は、AsyncTaskクラスの型パラメータと呼ばれます。 AsyncTaskgenericized Javaクラスです。これは、操作で異なるジェネリッククラスを使用できることを意味します。上記のリンクを参照してください。

3

JavaのGenerics機能が表示されています。ここでは良いチュートリアルです:http://docs.oracle.com/javase/tutorial/java/generics/index.html

+1

正確にはジェネリックスについて注意するべきことは、文法の他に、.NETやC++のジェネリックはコンパイル時にのみ使用され、バイトコードには保存されないということです。 u'llがジェネリック+リフレクションを使用するなら、それを念頭に置いてください。 – codeScriber

0

AsyncTaskはそれだけでjava.util.Listjava.util.Setなどの型でパラメータ化することができるので、ジェネリック型であり、多数の標準的なJavaクラス。

詳細については、Java tutorial about genericsをお読みください。

loadSomeData(LoadSomeData、またはそれよりも優れたもの:SomeDataLoader)は、String、Integer、およびStringを処理するAsyncTaskの特殊化であり、他の型ではないため、クラス宣言で宣言すると便利です。

関連する問題