Javaでクラスを使用するには?
私たちが知っているのは、”anyクラスのすべてのインスタンスは同じjavaを共有します。ラングそのタイプのクラスオブジェクト”
例えば)
Student a = new Student();Student b = new Student();
その後a.getClass() == b.getClass()
真です。
今仮定します
Teacher t = new Teacher();
ジェネリックなしで以下が可能です。
Class studentClassRef = t.getClass();
しかし、これは今間違っています。.?
例)public void printStudentClassInfo(Class studentClassRef) {}
Teacher.class
これはジェネリックを使用して避けることができます。,
Class<Student> studentClassRef = t.getClass(); //Compilation error.
さて、Tとは何ですか?? Tは型パラメータ(型変数とも呼ばれます)で、山かっこ(<>)で区切られ、クラス名の後に続きます。
Tは単なるシンボルであり、変数名のように(任意の名前にすることができます)クラスファイルの書き込み中に宣言されました。 その後、tは初期化中に有効なクラス名で置換されます(HashMap<String> map = new HashMap<String>();
)
例えば、class name<T1, T2, ..., Tn>
SoClass<T>
特定のクラスタイプ’T
‘のクラスオブジェクトを表します。,
ここでTはString
carnameとしてタイプ
またはTはInteger
modelNumberとしてタイプ、
またはTはObject
タイプとして使用できます有効な車のインスタンス。
ここで上記は、実行時に異なる方法で使用できる単純なPOJOです。コレクションなど)List、Set、Hashmapは、tの宣言に従って異なるオブジェクトで動作する最良の例ですが、tをString
eとして宣言すると、TはString
eます。,g)HashMap<String> map = new HashMap<String>();
それからそれはStringクラスのインスタンスオブジェクトだけを受け入れます。
ジェネリックメソッド
ジェネリックメソッドは、独自の型パラメータを導入するメソッドです。 これはジェネリック型の宣言に似ていますが、typeパラメーターのスコープは、宣言されているメソッドに限定されます。 静的および非静的ジェネリックメソッド、およびジェネリッククラスコンストラクターが
ジェネリックメソッドの構文には、山かっこの中に型パラメーターが含まれ、メソッドの戻り値の型の前に表示されます。, ジェネリックの方法には、型パラメータ部分よりも前に書かれていなければなメソッドの戻ります。
ここで<K, V, Z, Y>
は、戻り値の型の前にあるメソッド引数で使用される型の宣言ですboolean
ここで。型宣言<T>
は、すでにクラスレベルで宣言されているため、メソッドレベルでは必要ありません。
class MyClass<T> { private T myMethod(T a){ return a; }}
しかし、クラスレベルの型パラメータK、V、Z、およびYは静的コンテキスト(ここでは静的メソッド)では使用できないため、以下は間違っ,最後に、静的メソッドは常に明示的な<T>
宣言を必要とします。Class<T>
クラスレベルから派生することはありません。 これは、クラスレベルTがインスタ
ジェネリックの制限も読み取ります
ワイルドカードとサブタイプ
ジェネリックメソッドの型引数