가능한 모든 비검사 경고를 제거해야 한다.
제네릭을 사용하면 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고, 비검사 변환 경고 등과 같이 많은 컴파일러 경고가 나온다.
이런 경고는 런타임에 ClassCastException을 일으킬 수 있는 잠재적인 가능성을 뜻한다. 가능한 모든 비검사 경고를 제거한다면 코드는 타입 안전성이 보장된다.
경고를 제거할 수 없지만 타입 안전하다고 확신할 수 있으면 이 애너테이션을 달아 경고를 숨길 수 있다.
public <T> T[] toArray(T[] a){
if (a.length < size){
@SuppressWarnings("unchecked")
T[] result = (T[]) Arrays.copyOf(elements, size, a.getClass());
return result;
}
System.arraycopy(elements, size, a.getClass());
if(a.length>size)
a[size] = null;
return a;
}