배열은 런타임 시점에 타입 검사를 하지만, 제네릭 타입은 컴파일 시점에 타입 검사를 하기 때문에 타입 안정성을 가질 수 있다. 그래서 ClassCastException을 피할 수 있다.
아래 예제를 보면 어느 쪽이든 Long 타입에 String 타입의 데이터를 넣을 수는 없다. 다만, 배열에서는 이러한 오류(Exception) 사실을 런타임 시점에서 알 수 있고, 제네릭 타입은 컴파일 시점에서 알 수 있다는 차이를 가지고 있다.ㅏ
배열
예제 코드
Object[] objectArray = new Long[1];
objectArray[0] = "문자열 삽입";
오류 발생 시점; Rumtime
리스트
예제 코드
List<Object> ol = new ArrayList<Long>();
ol.add("문자열");
오류 발생 시점; Compile