ジェネリック
ジェネリックとは何ですか
ジェネリック医薬品:ジェネリック型の広い範囲
どのようなタイプを決定するためにどのような種類、使用時には、わからない始まり
(1)定義の開始時に、ジャッキを残します
オブジェクトが作成されたとき(2)、再度、対応するタイプに挿入
ジェネリック医薬品は、として理解することができる「パラメータ化された型。」メソッドのパラメータを定義するときに表示されているに最も精通し、パラメータの言及、および引数を渡すときに、このメソッドを呼び出します。
名前が示唆するように、また、パラメータの形式(typeパラメータを参照することができる)、この時点で定義されているプロセス変数パラメータ型と同様、元のパラメータのような特定の種類は、特に着信/呼び出しを使用する場合タイプ(型引数)。
(特に一般的な指定の異なる種類によって制限型のパラメータを制御するための新しいタイプの場合には作成されていない)パラメータ化されたタイプの汎用。つまり、操作のデータ型は、クラス、インタフェースおよびメソッドのタイプに使用することができる一般的なクラス、ジェネリックインターフェイス、ジェネリックメソッドと呼ばれるパラメータとして指定されている、一般的な使用です。
一般的な定義
ジェネリッククラス:パブリッククラスのデモ
ジェネリックインターフェイス:パブリックインターフェイスImplDemo <T、V> {}、及び(インターフェースは特別なクラスである)同じクラスを定義します。
一般的な方法:公共
<>ブラケット、名前は、任意の一般的に使用されるTであってもよい:タイプ、E:要素、K:キー、V:値。
このタイプを示すために、コードのセクションを呼び出し、誰でもできる不確実性のコードテンプレートの種類、。
デフォルトのObject型であるジェネリック型を指定しない場合、
ジェネリックのメリット
型変換の例外を避けるために、(1)コンパイル時に型の、セキュリティ保証の種類を、決定します。
(2)キャストを避けるために。
(3)コードの有益な再利用を増加汎用性。
一般的な自然
ジェネリック医薬品は、実際にシンタックスシュガー、エッセンス、またはオブジェクトであるが、それは強力な内部転送を行うことはまだあります。
class Demo<T> {
T x;
public Demo(T x) {
this.x = x;
}
public T getX() {
return x;
}
}
public class Test {
public static void main(String[] args) {
Demo<String> demo = new Demo<>("SSS");
String str = demo.x;
System.out.println(str);
}
}
後にコンパイル:
class Demo
{
Object x;
public Demo(Object x)
{
this.x = x;
}
public Object getX()
{
return x;
}
}
public class Test
{
public Test()
{
}
public static void main(String args[])
{
Demo demo = new Demo("SSS");
String str = (String)demo.x;
System.out.println(str);
}
}
一般的な方法とジェネリッククラス
(1)一般的なクラス
上記で定義されたジェネリッククラス、クラスのクラス名
上記従来の方法によってのみ定義される一般的なジェネリッククラスは、上記の静的方法で使用することができません。
(2)一般的な方法
上記方法でパラメータを渡すの特定のタイプを決定するために、使用時に、ジェネリックを添加します。
あなたは一人でジェネリックを使用する方法は、意味のあるパラメータが存在しなければなりません。
class Demo {
public <T> void demo1(T t) {
System.out.println(t.getClass());
}
public <T> T demo2(T t) {
System.out.println(t.getClass());
return t;
}
public static <T> void demo3(T t) {
System.out.println(t.getClass());
}
}
public class Test {
public static void main(String[] args) {
Demo demo = new Demo();
demo.demo1("str");// class java.lang.String
demo.demo1(10);// class java.lang.Integer
demo.demo1(10.5);// class java.lang.Double
Demo.demo3(true);// class java.lang.Boolean
}
}
一般的なワイルドカード
ワイルドカードは:私が受け取ったときに使用するどのような種類がわからない、使用することができますか?不明なことを示します。
(1)ワイルドカードボーダレス
無制限のワイルドカードの主な役割は、ジェネリック医薬品は、データの未知のタイプを受け入れることを可能にすることです。
public static void printList(List<?> list) {
for (Object o : list) {
System.out.println(o);
}
}
public static void main(String[] args) {
List<String> l1 = new ArrayList<>();
l1.add("aa");
l1.add("bb");
l1.add("cc");
printList(l1);
List<Integer> l2 = new ArrayList<>();
l2.add(11);
l2.add(22);
l2.add(33);
printList(l2);
}
この使用リスト<?>ウェイは、サブクラスのオブジェクトに親クラスの基準点です。このメソッドはがprintlist公共の静的な無効がprintlist(リストのように書くことができないことに注意してください