6. 지네릭 메서드
- 메서드의 선언부에 지네릭 타입이 선언된 메서드
- 지네릭 타입의 선언 위치는 반환 타입 바로 앞
- 지네릭 클래스에 정의된 타입 매개변수와 지네릭 메서드에 정의된 타입 매개변수는 전혀 별개의 것
- static멤버에는 타입 매개변수를 사용할 수 없지만, 메서드에 지네릭 타입을 선언하고 사용하
(지네릭 메서드는 지네릭 클래스가 아닌 클래스에도 정의될 수 있음)
Ex)
static <T> void sort(List<T> list, Comparator< ? super T > c )
static Juice makeJuice(FruitBox<T> box)
- 지네릭 메서드를 호출할 때는 타입 변수에 타입을 대입해야 함
그러나 대부분의 경우 컴파일러가 타입을 추정할 수 있기 때문에 생략 가능
Ex)
FruitBox<Fruit> fruitBox = new FruitBox<Fruit> ();
System.out.println(Juicer.<Fruit>makeJuice(fruitBox));
System.out.println(Juicer.makeJuice(fruitBox));
- 같은 클래스 내에 있는 멤버들끼리는 참조변수나 클래스 이름, 즉 'this.'나 '클래스이름.'을 생략하고 메서드 이름만으로 호출이 가능하지만,
대입된 타입이 있을 때는 클래스 이름을 반드시 써줘야 한다.
클래스 이름을 생략할 수 없는 경우에는 대입된 타입을 생략할 수 없다.
7. 지네릭 타입의 형변환
- 지네릭 타입 -> 원시 타입 (O)
- 원시 타입 -> 지네릭 타입 (O)
- 지네릭 타입 -> 지네릭 타입 (X)
- 지네릭 타입 -> 와일드카드가 포함된 지네릭 타입 (O) - 반대도 성립
Ex) Box<String> -> Box<? extends Object>
- 와일드 카드가 포함된 지네릭 타입-> 와일드카드가 포함된 지네릭 타입 (O)
Ex ) Box<? extends Object> <-> Box<? extends String>
java의 정석 chapter12