2012-03-05 26 views
2

simplelistadapterのようなアンドロイド用のArrayListでは、私は普通ArrayList<?>と表示していますが、私が検討したチュートリアルでは、<?>が値に置き換えられています。しかし、私はまだそれが何の変数か修飾子の略称であるかについてはまだ分かりません。<?>は何を意味しますか?

+0

http://docs.oracle.com/javase/tutorial/extra/generics/index.html – BalusC

+1

これは、単にArrayListがタイプであることを意味しますか? (つまり、ArrayListが記述する型、または型が?)は、以下に述べるように、非プリミティブ型であることを意味します。 'ArrayList 'を持っていれば、 'Long'、' String'、さらに 'Map'を含むことができます。しかしながら、 'ArrayList 'は 'Integer'値のみを含むことができます。 –

+0

http://stackoverflow.com/questions/6938488/what-is-the-meaning-of-the-token-in-java/6938523#6938523 –

答えて

4

Genericsと呼ばれます。

ArrayList<Integer> list = new ArrayList(); 
list.add(new Integer(1)); 
list.add(new Integer(2)); 
..... 

Integer i = (Integer)list.get(1); 

をそれとも、行うことができます:

たとえば、あなたがこれを行うことができます

ArrayList<Integer> list = new ArrayList<Integer>(); 
list.add(new Integer(1)); 
list.add(new Integer(2)); 
..... 

Integer i = list.get(1); 

あなたは、鋳造のための必要性を見ることができたよう。

+0

ArrayListは配列を格納できますか? ArrayList ? –

+0

ええ、ArrayList >でも、どのような型でも「格納」できます。 –

+0

私は、ArrayList 2Dを作成しますか?その文字列を見ると、整数はオブジェクトです。私は、ArrayList が正しく動作すると仮定? :) –

2

つまり、ArrayListには非プリミティブ型を含めることができます。

+0

ありがとうございました! – Bob

+0

@Bob確かに、喜んで助けてください。 –

0

ArrayList<? extends Object>に似ています。これは、任意のオブジェクトがObjectクラス(Javaのすべてのオブジェクト)から継承できることを意味します。

+0

ニックに気をつけないでくださいが、Javaのすべての非プリミティブオブジェクトは技術的に正しいでしょう。 –

+0

@TKKocheranしかし、「非プリミティブ」なオブジェクトはどういう意味ですか? Javaにはプリミティブなオブジェクトがありますか? –

+0

'ArrayList 'を作ることはできません。 'intList'はプリミティブ型でnullにはできませんが、' Integer'は実際のJava型であるため、 'ArrayList 'しか作成できません。実際にはnullになります。 –

0

構文は「ワイルドカード」です。これは、Javaのジェネリックで必要なのは:

ワイルドカードは "有界" または "無制限" することができます。一般的なタイピングが密接に "型消去" の実行時のJVMの問題に関連している、コンパイル/設計時間の全体の問題:

「希望に役立ちます。 .pSM

0

これはジェネリックに関する質問です。 <(オブジェクトの種類)>構文は、特定の種類のオブジェクト(クラスインスタンス)のみが引数として渡されることを示します。構文があるときは、どんな種類のクラスインスタンスも渡すことができるということです。

+0

Objectクラスはどうですか?クラスには4つの文字列が含まれています。それでもArrayListで使用できますか? –

2

は、汎用タイプのワイルドカード文字です。通常、次のような配列リストを宣言します。

ArrayList<String> 

ここで、型は厳密に指定されています。リストには文字列が含まれます。 しかし、時にはさて、この方法はArrayList<String>、またはArrayList<Long>を取ることができますが、任意の型のArrayListのを取るメソッドやクラスを作りたい、またはあなたがどのようなタイプ

public void removeFirstItem(ArrayList<?> target) { 
... 
} 

のArrayListのポイントフィールドをしたいですなど、いくつかの操作を行います。

あなたはローカル変数を持つことができますSimiliary:someListがArrayList<String>として指定されているので

ArrayList<String> someList = new ArrayList<String>(); 
someList = new ArrayList<Long>(); 

が、これだけArrayList<String>が、それに割り当てることができません。

ArrayList<?> someList; 
someList = new ArrayList<String>(); 
someList = new ArrayList<Long>); 

これは一方で、作品。

関連する問題