2012-02-08 13 views
1

愚かな音がする恐れがあります。 最近、私はjava/androidから始めました。 私はそれを愛していますが、すべてのものの愛のために、私はオペレータを見つけました。私は理解できないようです。 事は、私はそれの名前を知らないので、それのためのグーグルは不可能に近いです。私はそれについて何も見つけ出していない。そこにはないからではなく、どこから始めるべきか分からないからだ。Javaの "<object>"演算子の意味

オペレータは<someObject>です。同じオペレーターがList<object>で使用されています。アンドロイドでAsyncTaskクラスを使用しているとき、私はこの上

MyClass extends AsyncTask<String[], Drawable[], Drawable[]>{ 
    ... 

すべての情報が非常に高く評価されるような何かをしなければならなかったところ 私は実際にそれに魅了さになりました。

+4

の「Javaのジェネリック」 – Mat

+0

*ジェネリック*と* parametizedタイプのためのWebを検索してください*良いリソースにあなたを指している必要があります。検索を開始するには、* term *が必要であることを完全に理解してください:) –

+0

@Matとandreas_Dのおかげです。それらは素晴らしい出発点です – frostymarvelous

答えて

7

これは演算子ではありません。ジェネリック型パラメータの指定方法です。

Generics part of the Java Tutorialで始まり、次にGilad Bracha's paperで始まり、他のものについてはJava Generics FAQを消費することをお勧めします。 (Javaのジェネリックにおける節のコーナーのたくさんあります。)

+0

ありがとうございます。スクリプトの背景から来て、私はjavaを楽しんでいると言わなければならない。それはちょうど私が理解する時間を取っている(爽やかではあるが)異なる機能を持っています。忍耐と助けをありがとう。感謝。 – frostymarvelous

0

私はあなたの質問を理解していれば、その後、List<Object> myList = new List<Object>Objectsまたはそのサブクラスのいずれかを保持することができますmyListを意味します。つまり、myListはすべてのサブクラスのオブジェクトを保持できます(Object)。

0

Java 1.5より前では、Javaのコレクションクラスは「型指定なし」でした(技術的にはまだあります)。彼らは、java.lang.Objectから派生したアイテムだけを格納することができました。これは、あなたが想定していた包含型にObjectをキャストしなければならなかったので、やや面倒でした。これは、あらゆる種類の問題や奇妙なことにつながります。

Sun(現在のOracle)は、開発者がコンテナやその他のオブジェクトに "タイプ"を指定できるようにするための "トリック"を言語に追加しました。私が言ったように、これは "トリック"です、コンパイラは型安全性チェックを実行しますが、実際には放出されたオブジェクトのシグネチャに変更はありません。それはコードを整理し、少量の型安全性を追加しますが、実際にはパーラートリック以上のものはありません。

JDKに付属しているGenericsのドキュメントとチュートリアルを参照してください。

2

一般的な型と型の安全性と関係があります。

「古いJava」には、リストがあり、オブジェクトが含まれています。タイプセーフではありません。

List l = new List(); 
l.add(new Type1()); // valid 
l.add(new SomeOtherType()); // valid 

これらの日、あなたはリストで

List<Type1> l = new List<Type1>(); 
l.add(new Type1()); // valid 
l.add(new SomeOtherType()); // invalid since it is a list of Type1 

項目がタイプ1またはそれのサブクラスのいずれかとすることができると言います。

3

これは演算子ではなく、パラメータ化された型の宣言方法です。

Java 5より前では、あなたのリストは「何かのリスト」であり、タイプのないリストであるとは言いません。あなたのリストからオブジェクトを取ったときに、あなたは戻って、特定の型にキャストする必要がありました:Java 5の付

List strings = new ArrayList(); 
strings.add("hello"); 
String s = (String) strings.get(0); 

、あなたは、角括弧を使用して、要素の型を指定することができます。

List<String> strings = new ArrayList<String>(); 
strings.add("hello"); 
String s = strings.get(0); 

要素の正確なタイプが分かっているので、リストから取得したオブジェクトをキャストする必要はありません。さらに、コンパイラは、リスト内の互換性のないオブジェクトを追加できません。

List<String> strings = new ArrayList<String>(); 
strings.add(42); // Compiler error : expected a String, got an int 
関連する問題