AVA-Generics(4)


ワイルドカード

<? extends T> : 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T>   : 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?>			  : 제한 없음. 모든 타입이 가능.<? extends Object>와 동일

ギネス世界記録


方法の宣言部でギネスタイプの方法を発表しました
Collections.sort()はgenericメソッドであり、genericタイプの宣言位置は戻りタイプの前にあります.
//지네릭 타입이 선언된 메서드(타입 변수는 메서드 내에서만 유효)
static <T> void sort(List<T> list, Comparator<? super T> c)

//클래스 타입 매개변수 <T>와 메서드의 타입 매개변수 <T>는 별개
class FruitBox<T>{
	..
    static<T> void sort(List<T> list, Comparator<? upser T> c){
    
    }
}
  • メソッドが呼び出されるたびにタイプ(多くの場合省略)
  • を入力必要がある.
    FruitBox<Fruit> fruitBox = new FruitBox<Fruit>();
    FruitBox<Apple> appleBox = new FruitBox<Apple>();
    
    System.out.println(Juicer.<Fruit>makejuice(fruitBox));	//메서드 호출, 타입 대입
    System.out.println(Juicer.<Apple>makejuice(appleBox));  //메서드 호출, 타입 대입
    
    static<T extends Fruit> Juice makeJuice(FruitBox<T> box) {
    	String tmp =" ";
        for(Fruit f : box.getList()) tmp += f+ " ";
        return new Juice(tmp);
    }
  • メソッドを呼び出す場合、タイプを省略しないとクラス名
  • は省略できない.
    System.out.println(<Fruit>makeJuice(fruitBox));	//에러 클래스 이름 생략 불가
    System.out.println(this.<Fruit>makeJuice(fruitBox));	//ok
    System.out.println(juicer.<Fruit>makeJuice(fruitBox));	//ok
  • Genericメソッドを使用すると、呼び出されるたびに異なるGenericタイプに入ることができます.
  • ワイルドカードは、異なるタイプの複数のバイナリオブジェクトを処理するための参照変数です.