AVA - 지네릭스(Generics) (4)
와일드카드
<? extends T> : 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T> : 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?> : 제한 없음. 모든 타입이 가능.<? extends Object>와 동일
지네릭 메서드
메서드의 선언부에 지네릭 타입이 선언된 메서드르 지네릭 메서드라고 한다.
Collections.sort()가 바로 지네릭 메서드이며, 지네릭타입의 선언 위치는 반환 타입 바로 앞이다.
//지네릭 타입이 선언된 메서드(타입 변수는 메서드 내에서만 유효)
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
- 지네릭 메서드는 메서드를 호출할 때 마다 다른 지네릭 타입을 대입할 수 있게 한 것
- 와일드 카드는 하나의 참조변수로 서로 다른 타입이 대입된 여러 지네릭 객체를 다루기 위한 것.
Author And Source
이 문제에 관하여(AVA - 지네릭스(Generics) (4)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jo_dbsgh95/JAVA-지네릭스Generics-4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)