Effective JAVA, Item 27
in Study on Effectivejava, Item27
ITEM 27. 비검사 경고를 제거하라
비검사 경고 모두를 제거하면, 코드의 타입 안정성을 높일 수 있다.
Set<String> set = new HashSet();
위의 코드는 HashSet에 타입을 명시하지 않아 추후에 문제가 생길 수 있는 여지가 있다.
우선, 위의 코드 문제를 해결하는 방법은 아래와 같이 타입을 명시해주는 방법이다.
Set<String> set = new HashSet<String>();
// JAVA 7 부터는 다이아몬드연산자 <> 를 지원하여 아래로도 해결 가능
Set<String> Set = new HashSet<>();
이와 같이 추후 문제가 생길 여지가 있는 코드는 Compiler 에서 인지하고 알려줄 수 있다.
컴파일 시, 비검사 경고를 잘 확인하자
원래 비검사 경고는 컴파일 시엔 잘 확인할 수 없다.
따라서 컴파일 시 -Xlink:unchecked 옵션을 추가할 경우, 비검사 경고 관련해서 자세히 확인이 가능하다
비검사 경고를 숨기려면 가능한 좁은 범위로 적용할 것
허나 경고를 제거할 수는 없지만, 해당 경고에 대해 안전하다고 확신할 수 있을 땐 어떻게 제거할 수 있을까?
이럴 경우, @SuppressWarning(“unchecked”) 를 사용할 수 있다.
@SuppressWarning(“unchecked”) 어노테이션은 선언된 곳에서 발생하는 비검사경고를 숨겨주는 기능을 한다. 안전하다고 판단된 부분의 경고를 숨김으로써 진짜 경고 들을 더 빠르고 쉽게 판별할 수 있기 때문이다.
허나, 비검사 경고를 숨겨야 할땐 가능한 좁은 범위에 적용 하는 것이 좋다.
보통은 변수 선언, 아주 짧은 메서드, 혹은 생성자에 붙여 사용한다.
큰 범위로 적용하게 될 때엔 심각한 경고를 놓치게 될 수 있으므로, 절대 클래스 전체에 적용해서는 안된다.
public <T> T[] toArray(T[] a) {
if (a.length < size) {
// 생성한 배열과 매개변수로 받은 배열의 타입이 모두 T[] 로 같으므로
// 올바른 형변환이다.
@SuppressWarnings("unchecked")
T[] result = (T[]) Arrays.copyOf(elements, size, a.getClass());
return result;
}
System.arraycopy(elements, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
실제 ArrayList 코드
``` java @SuppressWarnings("unchecked") publicFin.
---