제네릭과 와일드카드
제네릭 메소드는 리턴타입 앞에 <T>가 붙는다.
하지만 와일드 카드는
타입매개변수로 <?>를 넣어서
제네릭 메소드와 동일한 기능을 하는 일반 메소드를 만들 수 있다.
(이걸 더 권장)
제네릭은 클래스, 메소드 모두 사용 가능!
와일드 카드는 메소드에서만 사용 가능!
와일드카드와 상한제한
<? extends 클래스>
해당 클래스를 상속받는 클래스만 타입인자로 넣을 수 있다.
Toy를 상속받는 클래스는 타입으로 넣을 수 있지만
Toy를 상속받는 클래스가 아닌 String을 넣으면 오류가 난다.
상한제한 걸면 set불가
와일드 카드 하한제한
<? super클래스>
해당 클래스이거나 해당클래스의 부모클래스만 타입인자로 올 수 있다.
해당 클래스인 Toy와 Toy의 부모 클래스 Object는 타입인자로 올 수 있음!
하한제한을 걸면 get불가
상한/하한제한 + 타입인자제한
public static <T extends 클래스> void 메소드명(제네릭클래스<? extends T> 매개변수){
}