Java と Android ではArrayList<String>
、標準よりも使いやすいので、供給リストに使用することになりますString[]
。私の本当の質問はこれです:呼ばれた部分は
何ですか? クラスを作成して[modifier] を使用するにはどうすればよいですか? (実際に何と呼ばれているかはわかりませんので、今のところ修飾子です)。ありがとう!<String>
ArrayList<String>
<>
6 に答える
ここでは、おそらくより明確に表示されます。
ArrayList<TypeOfYourClass>
このスニペットが示すように、Person クラスを作成して ArrayList に渡すことができます。
ArrayList<Person> listOfPersons = new ArrayList<Person>();
<String>
部分は型引数です。メソッドがある場合と同じように、 in ... である型パラメーターの並べ替えの「値」を提供します。E
ArrayList<E>
public void foo(int x)
そして、あなたはそれを次のように呼び出します:
foo(5)
パラメータはx
で、指定された引数は です5
。基本的に、型パラメーターと型引数は一般的な同等のものです。
詳細については、JLS のセクション 4.5 (およびそこからのリンク) を参照してください。ジェネリックに関する詳細については、Java Generics FAQを参照してください。
間のビット<>
は型引数であり、機能はGenericsと呼ばれます
ArrayList を文字列だけで埋めたいとします。あなたが書く場合:
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
誰かが arrayList に int を入力しようとすると、コンパイル時に検出されます。
したがって、ジェネリックは、このような制限を適用したい状況で使用されます。
Javaのジェネリック構文を調べます。これで問題は解決します (まあ、まあ、多くの人は Java のアプローチが C++ や C# よりも劣っていると感じています)。
は型パラメータです。Java では、クラスがジェネリックとして記述されるときに、これらのいずれかを提供する必要があります。
ジェネリック クラス定義の例を次に示します。
private class GNode<T>
{
private T data;
private GNode<T> next;
public GNode(T data)
{
this.data = data;
this.next = null;
}
}
渡す任意のタイプのノードを作成できるようになりました。T は、クラス定義のジェネリック型パラメーターとして機能します。整数のノードを作成する場合は、次のようにします。
GNode<Integer> myNode = new GNode<Integer>();
型パラメーターはオブジェクトでなければならないことに注意してください。これは、Java の自動ボックス化と自動ボックス化解除によって機能します。これは、Java プリミティブ型を使用できず、代わりに対応するクラスを使用する必要があることを意味します。
Boolean instead of bool
Integer instead of int
Double instead of double
etc...
また、型パラメーターを渡さない場合でも、コードはコンパイルされると確信しています。しかし、それはうまくいきません。