<aside> 💡 서로 잘 어우러지지 않아서, 함께 사용시에는 주의해야한다.
</aside>
⇒ 가변인수 메서드를 호출시, 가변인수를 담기 위해 배열이 자동
으로 만들어진다.
이때, 이 배열을 클라이언트에 노출되어 가공되면, [Item28] 배열보다 리스트 사용 에서 언급했던 문제들이 발생한다.
만약 제네릭 배열을 만들 수 있다면?
[Item28] 배열보다 리스트 사용 → “제네릭 배열 사용 금지”
List<String>[] stringLists = new List<String>[1];
List<String>[] stringLists = new List<String>[1]; //런타임 시 List[] 타입이 됨
List<Integer> intList = List.of(42); //런타임 시 List[] 타입이 됨
Object[] objects = stringLists; //배열은 공변이라 넣을 수 있음
objects[0] = intList; //제네릭은 소거 방식 구현이라 넣을 수 있음
String s = stringLists[0].get(0); //컴파일러가 꺼낸 원소를 String으로 형변환
//이때 ClassCastException 발생함
제네릭 배열을 허용한다면 컴파일러가 자동 생성한 형변환 코드에서 런타임
에 ClassCastException이 발생할 수 있어 타입 안전성이 사라질 수 있음