ジェニーリック


なぜジェニーンリックを使うの?



Javaで使用される様々な集合クラスや関数式プログラミング関連クラスでは、JENICタイプで宣言されるパラメータがたくさんあります.そのため、Javaを本当に理解するには、Jennikについて明確な理解が必要です.
では、ジュネーブを使う理由は何でしょうか.最初にジュネーブを使うと더 강한 데이터 타입 체크ができます.JENICのコードを使用してタイプエラーが発生した場合、checked exceptionが発生し、コンパイルフェーズで開発者がタイプを確認できます.2つ目は캐스팅을 줄여 성능상 이점を有することができる.コレクションクラスを使用する場合は、JENICと宣言してタイプ変換を減らすことができます.この部分は少し省略してから聞く.

ジェニーリックタイプを使用する方法


結局、ジェニーンリックのタイプは何ですか?ジェニーリックタイプとは、タイプをパラメータとして渡すクラスとインタフェースを指します.たとえば、Studentというクラスを作成しました.クラスのリストを作成する場合は、List<Student>のように、<>内でリストに含めたいタイプをパラメータに渡し、リストを生成することができる.

リストインタフェースが宣言されたコードが表示された場合、List<E>と宣言されたパラメータのタイプを確認できます.

ジェニーリックタイプが角を減らす理由


この部分はコードで見た方が分かりやすいので、まずコードを見てみましょう.
public class FirstDeveloper {
    private Object object;
    public void set(Object object) { this.object = object; }
    public Object get() { return this.obj; } 
}

public class SecondDeveloper<T> {
    private T t;
    public void set(T t) { this.t = t; }
    public T get() { return this.t; }
}

public class Example {
    public static void main(String[] args){
    	FirstDeveloper developer1 = new FirstDeveloper();
        developer1.set("고재석");                  // 자동 타입 변환 (String -> Object)
        String name = (String) developer1.get(); // 강제 타입 변환 (Object -> String)
        
        SecondDeveloper<String> developer2 = new SecondDeveloper<>();
        developer2.set("고재석");
        String name = (String) developer2.get();
    }
}
上のコードから,第1の開発者と第3の開発者の2つを発表した.次に、各クラスのフィールド変数を設定、取得し、タイプ変換が発生しているかどうかを確認します.一般的なタイプのクラスでは、Stringタイプの変数が自動的にObjectタイプに変換され、getの場合、Objectタイプの変数が強制的にStringタイプに変換されます.ただし、Genericタイプのクラスではタイプ変換は発生しません.
いずれにしても1つのタイプの特定変数だけを使うと、上記のように宣言時にEnericタイプに減らす方が効率的です.では、1種類だけ使わないとどうなるのでしょうか.この場合、制限タイプの方法を使用することができます.

制限タイプパラメータ


継承関係を制限タイプパラメータで表す方法があり、指定したクラスのサブクラスをパラメータに制限します.
public <T extends Number> int compare(T t1, T t2) { ... }
上記のコードに示すように,Tというタイプパラメータ変数をNumberのサブクラスに制限することができる.したがって、比較方法のパラメータは、Integer、Doubleなどの番号付けクラスのサブクラスのタイプオブジェクトのみです.
タイプパラメータをより詳細に制限する方法は、ワイルドカードタイプとして宣言することです.ハーモニーに?ワイルドカードと呼びます.このワイルドカードを使って、自分がどのタイプに属しているかを宣言する方法は大きく3つあります.
  • クラス名
  • 級名称
  • 級名称
  • 同様に、ワイルドカードタイプを使用すると、superを使用してJENICタイプを特定のクラスの親タイプに制限できます.