첫 번째 방법 : 제네릭 배열 E[] 대신 Object 배열을 생성한 뒤에 제네릭 배열로 형변환 한다.
현업에서 더 사용되는 방
형변환을 배열 생성시 한 번만 한다.
가독성이 좋다
힙 오염이 발생할 수 있다.
PublicclassStack<E>{privateE[]elements;privateintsize=0;privatestaticfinalintDEFAULT_INITIAL_CAPACITY=16;// 배열 elements는 push(E)로 넘어온 E 인스턴스만 담는다.따라서타입안전성을보장하지만,이배열의런타임타입은E[]가아닌Object[]다!@SuppressWarnings("unchecked")publicStack(){elements=(E[])newObject[DEFAULT_INITIAL_CAPACITY];}...}
두 번째 방법 : 제네릭 배열 E[] 대신 Object 배열을 사용하고, 배열이 반환한 원소를 E로 형변환 한다.
원소를 읽을 때마다 형변환을 해줘야 한다.
PublicclassStack<E>{privateObject[]elements;privateintsize=0;privatestaticfinalintDEFAULT_INITIAL_CAPACITY=16;@SuppressWarnings("unchecked")publicStack(){elements=newObject[DEFAULT_INITIAL_CAPACITY];}publicEpop(){if(size==0)thrownewEmptyStackException();//push에서 E 타입만 허용하므로 이 형변환은 안전하다.@SuppressWarnings("unchecked")Eresult=(E)elements[--size];elements[size]=null;returnresult;}...}