클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라고 함제네릭 클래스와 제네릭 인터페이스를 통틀어서 제네릭 타입이라고 함각각의 제네릭 타입은 일련의 매개변수화 타입을 정의함먼저 클래스(혹은 인터페이스) 이름이 나오고 이어서
제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 될 것임비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고, 비검사 변환 경고 등대부분의 비검사 경고는 쉽게 제거할 수 있음, 아래의 예시를 볼 수 있음이처럼 할 수 있는 한 모든
배열과 제네릭 타입에는 중요한 차이가 두 가지 있음배열은 공변(Covariant)임, Sub 가 Super 의 하위 타입이라면 배열 Sub\[] 는 Super\[] 의 하위 타입이 되고 함께 변함제네릭은 불공변(invariant)임 서로 다른 타입 Type1 과 Typ
위 클래스는 원래 제네릭 타입이어야 마땅함, 여기서 이 클래스를 제네릭으로 바꾼다고 해도 현재 버전을 사용하는 클라이언트에는 해가 없음, 오히려 지금 상태에서의 클라이언트는 스택에서 꺼낸 객체를 형변환해야 하는데 이때 런타임 오류가 날 위험이 있음먼저 일반 클래스를 제
클래스와 마찬가지로, 메서드도 제네릭으로 만들 수 있음, 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭임(예컨대 Collections의 알고리즘 메서드는 모두 제네릭임)제네릭 메서드 작성법은 제네릭 타입 작성법과 비슷함위 메서드는 컴파일은 되지만 경고가 두
매개변수화 타입은 불공변임 서로 다른 타입 Type1 과 Type2 가 있을 때 List<Type1> 은 List<Type2> 의 하위 타입도 상위 타입도 아님즉 List<String> 은 List<Object>의 하위 타입이 아니라는 뜻임따지고